【问题标题】:Rails Pass additional parameters in link_toRails 在 link_to 中传递附加参数
【发布时间】:2016-07-14 04:06:15
【问题描述】:

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

按照用户的操作顺序:

  1. 用户导航到 www.myserver.com/network_hosts/XX(show 方法)
  2. 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
  1. 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>
  1. 然后应该触发 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 中呈现的链接是什么样的?他们是否正确获得了额外的参数?
  • 啊,对不起,没有:&lt;a data-toggle="tooltip" href="/issues/5" title="" data-original-title="View"&gt;&lt;i class="fa fa-eye"&gt;&lt;/i&gt;&lt;/a&gt;
  • 好吧,你的第一种方法应该也能正常工作,以同样的方式添加额外的参数。唯一需要的是存在路由声明的参数。由于您的请求是get(与所有普通链接一样),因此没有直接的解决方法。您可以使用来自 javascript 的 post 或一些 cookie/sessionshackery 来传递额外的值。不过,像您这样的网址没有任何问题。

标签: ruby-on-rails ruby


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-04
    • 2014-01-18
    • 2011-09-19
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    • 1970-01-01
    相关资源
    最近更新 更多