我可以将params传递到控制器路径吗?

时间:2015-03-13 20:47:33

标签: ruby-on-rails ruby hyperlink parameters controller

我有一些不同的链接,除了一个小的区别外,它们做同样的事情。是否可以将它们全部链接到相同的路径,但是使用不同的参数来改变控制器中那个小差异的行为?

我在考虑这样的事情:

查看

<%= link_to "Link-A", link_path(@user), @x = 1 %>
<%= link_to "Link-B", link_path(@user), @x = 2 %>

users_controller.rb

def link
  @user = User.find(params[:id])
  #code that should be executed for both links
  if @x == 1
    #do something
  elsif @x == 2
    #do something else
  end
end

我知道这个具体的代码可能并不接近正确,但希望它能说明我想要做的事情。

3 个答案:

答案 0 :(得分:3)

我认为您应该将您的参数作为选项添加到您的路径中:

<%= link_to "Link-A", link_path(@user, x: "1") %>

然后在控制器中你可以这样做:

...
@input = params[:x]
if @input ...
...

答案 1 :(得分:3)

查看

<%= link_to "Link-A", link_path(@user, x: 1) %>
<%= link_to "Link-B", link_path(@user, x: 2) %>

<强>控制器

def link
  @user = User.find(params[:id])
  x = params[:x]

  #code that should be executed for both links

  if x == 1
    #do something
  elsif x == 2
    #do something else
  end
end

答案 2 :(得分:1)

在视图中,还发送控制参数

<%= link_to 'Link', request.parameters.merge({:x => 'special'}) %>

在控制器中,检查参数,然后启动逻辑。

if params.fetch(:x)
  # A different logic
end