【问题标题】:Can I pass params into a controller path?我可以将参数传递到控制器路径吗?
【发布时间】:2015-05-16 11:49:15
【问题描述】:

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

我在想这样的事情:

查看

<%= 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_path(@user, x: 1)?我认为这将传递 params 哈希 (params[:x]) 中的值。
  • How to replace a pattern in a string 的可能重复项,因为你也问过这个问题。
  • @engineersmnky 他们是完全不同的问题......这个是在询问如何访问控制器中的参数,一个是在询问如何替换模式。

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


【解决方案1】:

查看

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

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

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

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

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-07-30
        • 1970-01-01
        • 2015-04-26
        • 2015-09-23
        • 2021-01-28
        • 2019-07-10
        • 1970-01-01
        相关资源
        最近更新 更多