我的印象是,可以在Rails中的link_to
标记内传递其他参数。我所拥有的是一个按钮,用户可以点击该按钮移动到另一个控制器show
方法/视图,我需要能够将@network_host.id
传递给新控制器issues_controller.rb
,但是它不工作。相反,我被重定向回我的root_url
。
按照用户的方式执行:
- 用户导航至www.myserver.com/network_hosts/XX(显示方法)
- controllers / 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
- views / 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>
- 然后应该触发controllers / issues_controller.rb(show method,即www.myserver.com/issues/5432),
醇>
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"}
我是否实施了这个错误?
答案 0 :(得分:0)
您的方法是正确的,但路由助手中的host
选项(以及url_for
的所有其他衍生物)保留用于修改生成的URL中的主机。但由于您使用的是issue_path
而不是issue_url
,因此host
参数将被忽略。要解决您的问题,请选择其他参数名称。