2016-07-13 31 views
0

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

在用户将如何做到这一点的顺序:

  1. 用户导航到www.myserver.com/network_hosts/XX(显示方法)
  2. 控制器/在
  3. network_hosts_controller.rb踢
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 
  • 视图/ network_hosts/show.html.erb(用户点击的link_to按钮)
  • <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> 
    
  • 应该然后火控制器/ issues_controller.rb(显示方法,即www.myserver.com/issues/5432),
  • class IssuesController < ApplicationController 
        def show 
        @issue = Issue.find(params[:id]) 
        @network_host = NetworkHost.find(params[:host]) 
        end 
    end 
    

    然而,步骤4不是worki ng,而是返回主页。所以在我的控制台,我看着正在传递什么参数,我没有看到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"} 
    

    上午我实现这个错了吗?

    +0

    什么是在'意见/ network_hosts/show.html.erb'您呈现的HTML? –

    +0

    只有一堆'@ network_host'值。没有任何问题,只是这个该死的链接。 – Godzilla74

    +0

    更具体地说,html中呈现的链接是什么样的?他们是否正确地获得了额外的参数? –

    回答

    0

    您的方法是正确的,但路由帮助程序中的host选项(以及url_for的所有其他衍生物)仅用于修改生成的URL中的主机。但是,由于您使用issue_path而不是issue_url,该host参数只是被忽略。要解决您的问题,请选择另一个参数名称。