Rails在link_to中传递其他参数

时间:2016-07-13 18:57:16

标签: ruby-on-rails ruby

我的印象是,可以在Rails中的link_to标记内传递其他参数。我所拥有的是一个按钮,用户可以点击该按钮移动到另一个控制器show方法/视图,我需要能够将@network_host.id传递给新控制器issues_controller.rb,但是它不工作。相反,我被重定向回我的root_url

按照用户的方式执行:

  
      
  1. 用户导航至www.myserver.com/network_hosts/XX(显示方法)
  2.   
  3. controllers / network_hosts_controller.rb启动
  4.   
class NetworkHostsController < ApplicationController
   before_action :set_network_host, only: [:show]

   def show
     @network_host = NetworkHost.find(params[:id])
     if @network_host
       @major_issues = get_host_issues(@network_host, @network_host.last_test, "major")
       @minor_issues = get_host_issues(@network_host, @network_host.last_test, "minor")
     end
   end
end
  
      
  1. views / network_hosts / show.html.erb(用户点击link_to按钮)
  2.   
<tbody>
  <% @major_issues.to_enum.with_index(1).each do |result, index| %>
    <% issue = result.issue %>
    <tr>
      <td>
        <%= link_to '<i class="fa fa-eye"></i>'.html_safe, issue_path({ id: issue.id, host: @network_host.id }), "data-toggle" => "tooltip", "title" => "View" %>
      </td>
    </tr>
  <% end %>
</tbody>
  
      
  1. 然后应该触发controllers / issues_controller.rb(show method,即www.myserver.com/issues/5432),
  2.   
class IssuesController < ApplicationController
  def show
    @issue = Issue.find(params[:id])
    @network_host = NetworkHost.find(params[:host])
  end
end

但是,第4步不起作用,而是返回主页。所以在我的控制台中,我正在查看传递的参数,并且我没有看到host参数:

Started GET "/issues/54387" for 127.0.0.1 at 2016-07-13 14:06:49 -0400
Processing by IssuesController#show as HTML
  Parameters: {"id"=>"54387"}

我是否实施了这个错误?

1 个答案:

答案 0 :(得分:0)

您的方法是正确的,但路由助手中的host选项(以及url_for的所有其他衍生物)保留用于修改生成的URL中的主机。但由于您使用的是issue_path而不是issue_url,因此host参数将被忽略。要解决您的问题,请选择其他参数名称。