【发布时间】:2016-07-14 04:06:15
【问题描述】:
我的印象是可以在 Rails 中的 link_to 标记中传递其他参数。我有一个按钮,用户可以单击该按钮移动到另一个控制器show 方法/视图,我需要能够将@network_host.id 传递给新控制器issues_controller.rb,但它不起作用。相反,我被重定向回我的root_url。
按照用户的操作顺序:
- 用户导航到 www.myserver.com/network_hosts/XX(show 方法)
- 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(显示方法,即 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"}
我是不是执行错了?
【问题讨论】:
-
views/network_hosts/show.html.erb呈现的 html 中有什么内容? -
只是一堆
@network_host值。没有任何问题,只是这个该死的链接。 -
更具体地说,在 html 中呈现的链接是什么样的?他们是否正确获得了额外的参数?
-
啊,对不起,没有:
<a data-toggle="tooltip" href="/issues/5" title="" data-original-title="View"><i class="fa fa-eye"></i></a> -
好吧,你的第一种方法应该也能正常工作,以同样的方式添加额外的参数。唯一需要的是存在路由声明的参数。由于您的请求是
get(与所有普通链接一样),因此没有直接的解决方法。您可以使用来自 javascript 的post或一些 cookie/sessionshackery 来传递额外的值。不过,像您这样的网址没有任何问题。
标签: ruby-on-rails ruby