【问题标题】:Determining where parameters passed from view to controller originated确定从视图传递到控制器的参数的来源
【发布时间】:2011-05-07 18:28:35
【问题描述】:

在我的ApplicationController 父类中,我有一个名为dig 的操作方法,它通过params[] 类哈希结构读取参数。我希望有任何视图通过link_to 辅助函数和dig 操作建立到任何控制器的链接,以首先调用父操作。然后我希望能够确定参数化信息代表什么(它的类型),或者是什么创建了链接(前一个或原始视图)。

关于最佳方式的任何想法?有没有办法通过link_to 传递一个对象,然后使用它的元数据?如果是这样,这会破坏 Rails 范式吗?

【问题讨论】:

  • 您在link_to 上似乎有点模糊,所以也许这会有所帮助。视图不会“调用”控制器。您的路由以两种方式定义 - 构建 URL,并根据 URL 确定操作。当您使用 link_to 时,它会根据您的路由构建一个 URL/路径。
  • 感谢您对 coreyward 的评论。我明白你在解释什么,我的问题确实让我有点不知所措。从您的评论看来,以这种方式传递的对象似乎是不可能的。有什么方法可以确定创建该链接的先前视图是什么?
  • 尝试根据您的建议稍微清理一下问题。
  • 您可以将其作为附加参数传递或将该信息存储在会话中,甚至只使用引荐来源网址。您如何做到这一点取决于信息准确对任务的关键程度以及您的应用程序的架构是什么。
  • 将其作为附加参数传递的最佳方式是什么?我会在路由中配置这个吗?

标签: ruby-on-rails ruby ruby-on-rails-3


【解决方案1】:

如果您正在寻找代码中的内容,Ruby 的caller 方法是异常发生时堆栈转储的基础。您可以随时利用它并询问调用链是什么。

如果您想跟踪来自外部站点的来自浏览器的传入请求,这将变得更加困难,因为浏览器不再喜欢显示最后的位置。如果浏览器被重定向到您自己的站点,您可以使用会话或 cookie 来跟踪其移动。

【讨论】:

    【解决方案2】:

    我认为要获得原始链接,您需要做的事情是这样的:

    request.env['HTTP_REFERER']
    

    这将获取操作发起的 URL,从那里您可以处理 URL 以获取控制器、操作和 ID。希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-02
      • 2011-09-12
      • 1970-01-01
      相关资源
      最近更新 更多