如何在 rails 上的 Ruby 中的 views/pages 之间传递数据?

how to pass data between views/pages in Ruby on rails?

我在 rails 应用程序上有一个 ruby。我有一个列出超链接的视图,该视图也通过相同的 controller/action 呈现。当用户单击此页面上显示的超链接时,他们会转到相同的 controller/action,但 ID 参数不同。我希望能够在我的 controller/view 中告诉用户如何访问这些页面,即用户是否点击了这些超链接之一与用户来自不同的来源?

<div id='list'>
  <a href='controller/action/1'> some link 1 </a>
  <a href='controller/action/2'> some link 2 </a>
</div>

最好的方法是在链接中添加一个 URL 参数。

<div id='list'>
  <a href='controller/action/1?via=from_view'> some link 1 </a>
  <a href='controller/action/2?via=from_view'> some link 2 </a>
</div>

编辑

您可以使用 params 在您的控制器中访问此 URL 参数。简单示例:

class MyController < ApplicationController
  def show
    @via = params[:via] || "external"
  end
end
<% if @via == "from_view" %>
  <p>Hello coming from the view!</p>
<% elsif @via == "external" %>
  <p>Hello coming from external!</p>
<% end %>
<div id='list'>
  <a href='controller/action/1?via=from_view'> some link 1 </a>
  <a href='controller/action/2?via=from_view'> some link 2 </a>
</div>

您可以轻松地将 URL 参数传递给 Rails URL 助手。

例如:

<%= link_to "Link Title", some_url_helper_path(:param1 => "value1", :param2 => "value2") %>

然后您将能够将参数从视图传递到控制器的操作。

用户来自哪里是 HTTP 规范的一部分(引荐来源 header),您可以使用 request.referer 在您的控制器中访问它 - 然后您可以检查该值是否与页面匹配你要定位。

如果您的控制器有 @origin = request.referer,您可以在视图中使用 if @origin == 'http://example.com/page-1’ 来切换正在渲染的内容。

这样你就不必记住用额外的参数装饰你的所有链接;依靠浏览器自动将其添加到 headers 的事实。

另见:

How to get request referer path?

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referer