在Rails中传递带有符号和对象的数组时,link_to帮助器扩展为什么?

时间:2016-07-26 22:46:42

标签: ruby-on-rails activeadmin

在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扩展为什么。

1 个答案:

答案 0 :(得分:3)

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

  1. "/users/john-smith"
  2. 这样的字符串
  3. @user
  4. 这样的对象
  5. [:admin, user]
  6. 这样的数组
  7. admin_user_path(user)
  8. 之类的路径

    如果url参数是一个字符串,它只是将其传递给链接的href。如果url参数是Object,Array或路径,它会将值传递给幕后的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_for。 {<1}}是您想要&#34; unscope&#34; 的方法。我在自己的应用程序中以类似的情况测试了这个概念,并得到了与@ Jwan622相同的结果。

    polymorphic_path

    因此,你应该使用它:

    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