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

Can I pass params into a controller path?

我有几个不同的 links,除了一个细微差别外,它们做同样的事情。是否有可能 link 它们全部到同一条路径,但是使用不同的参数来改变控制器中那个微小差异的行为?

我在想这样的事情:

查看

<%= 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

我知道这个特定的代码可能甚至不正确,但希望它能清楚地说明我正在尝试做什么。

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

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

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

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

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

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

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

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

查看:

<%= 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