【问题标题】:What does a link_to helper expand to when passed an array with a symbol and object in Rails?在 Rails 中传递带有符号和对象的数组时,link_to 助手扩展为什么?
【发布时间】:2016-07-26 22:46:42
【问题描述】:

在 Rails 中(特别是在 ActiveAdmin 中)带有作为第二个参数传递的数组的 link_to 帮助器有什么作用?这方面的文档在哪里?

我有这个代码:

index pagination_total: false do column :name, :sortable => :first_name do |user| link_to user.full_name, [:admin, user] end

那有什么作用? [:admin, user] 在这里做什么?

这里有一个令人困惑的事情是我的 ActiveAdmin 面板被定义为:

ActiveAdmin.register Promotions::User, as: "User" do

所以链接实际上是像这样在模块前面出现的:

admin_promotions_users_path 我不想要。这会导致错误,因为as: 会覆盖 ActiveAdmin path_helper。我想要的是:

admin_users_path

简而言之,我认为这里的错误是我不知道 link_helper 在传递带有符号对象的数组时扩展为什么。

【问题讨论】:

  • 正如您所观察到的link_to user.full_name, [:admin, user] => admin_promotions_users_path(我假设这是目前在促销控制器上)。我想你想要的是link_to user.full_name, admin_users_path
  • 为什么不变成admin_user_path?促销活动如何进入那里? ActiveAdmin 是否劫持了用户对象?

标签: ruby-on-rails activeadmin


【解决方案1】:

根据Ruby on Rails - link_to method,方法签名是link_to(body, url, html_options = {})url 参数可以取:

  1. "/users/john-smith" 这样的字符串
  2. @user这样的对象
  3. 一个像[:admin, user]这样的数组
  4. 类似 admin_user_path(user) 的路径

如果url 参数是一个字符串,它只是将它传递给链接的href。如果url 参数是对象、数组或路径,它会将值传递给幕后的url_for 方法。

url_for会取一个Object,判断类类型为User,并寻找对应的user_path(@user)路由方法。对于数组,它首先接受任何符号并使用它来构造 url 助手的名称,然后它将接受任何对象并将其作为值传递。这就是link_to user.full_name, [:admin, user] 转换为admin_user_path(@user) 最终变为<a href="/users/john-smith">John Smith</a> 的方式

更新

根据this Stack Overflow answer(链接到url_forpolymorphic_urlurl_for 接受输入并将其传递给父方法,该方法出于某种原因添加了当前范围。 link_to 默认使用 url_forpolymorphic_path 是您想要 "unscope" 它时需要的方法。我在自己的应用程序中以类似的情况测试了这个概念,得到了与@Jwan622 相同的结果。

url_for([:admin, user]) # Does not exist
#=> admin_promotions_users_path 

polymorphic_path([:admin, user]) # Exists
#=> admin_users_path

因此,你应该使用这个:

link_to user.full_name, admin_users_path

或者这个(如果需要动态生成链接):

link_to user.full_name, polymorphic_path([:admin, user])

【讨论】:

  • 那么为什么在命名空间的 ActiveAdmin 页面中,link_to user.full_name, [:admin, user] => admin_promotions_users_path。当我尝试点击 url 时,我得到一个“无法找到 admin_promotions_users_path 错误从使用这个 link_to 到数组(当我注释掉 link_to 助手时它不会失败)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-18
  • 1970-01-01
  • 2013-05-13
  • 1970-01-01
相关资源
最近更新 更多