Ruby on Rails-通过if条件在link_to中传递参数?

时间:2018-08-31 12:07:06

标签: ruby-on-rails ruby

我想在指向的链接上传递参数(例如,参数称为company = heise),但前提是该参数确实存在。

让我们说:

我访问了somesite.com,然后单击一个链接,该链接会将我重定向到mysite.com/?company=heisemysite上,我有一些link_to,我希望它们在存在参数company=heise时传递参数mysite.com/?company=heise,因为我现在是通过<%= link_to "This is a link", this_link_path, class: tl(this_link_path) %> 进入站点的,所以它存在,因为它应该执行以下操作:

mysite.com/this_link/?company=heise

应将我重定向到{{1}}

  • 如果设置了company = heise,我想在URL中显示它们,并且我还不想在未设置时不显示它。

希望我的问题足够清楚

2 个答案:

答案 0 :(得分:1)

有条件地传递散列,其中包含this_link_path网址帮助程序的其他参数。

<%= link_to "This is a link", this_link_path( ({company: params[:company] } if params[:company]) ), class: tl(this_link_path) %>

为简洁起见,您可以compact哈希。

<%= link_to "This is a link", this_link_path({company: params[:company]}.compact), class: tl(this_link_path) %>

如果您知道会更需要它,请将this_link_path调用包装在自定义帮助程序中。哈希可以包含其他参数,包括具有固定值的参数。

def this_link_with_additional_params_path
  this_link_path({company: params[:company], name: 'test'}.compact) 
end

然后在视图中可以使用:

<%= link_to "This is a link", this_link_with_additional_params_path, class: tl(this_link_path) %>

答案 1 :(得分:0)

这里的想法是创建一个辅助方法来管理要有条件地发送到此链接的参数。

# some_helper.rb
def carried_over_params(params = {})
  interesting_keys = %i(company)
  params.slice(*interesting_keys).compact
end

然后,您应该在视图中使用它

<%= link_to "This is a link", this_link_path(carried_over_params(params).merge(test: 'value')), class: tl(this_link_path) %>