【问题标题】:Persistent parameter in Rails controllerRails 控制器中的持久参数
【发布时间】:2011-08-03 08:07:04
【问题描述】:

有没有办法在 Rails 控制器中保留(保留)参数?它应该被传递给每一个动作,然后传递给每一个视图和每一个链接。

示例情况: 我有实体 A 及其控制器。此外,我还有另一个依赖于 A 的实体 B。我需要经常访问“父”A 实体,所以我希望它仍然是

http://some_url/b_controller/b_action?a_entity=xyz

【问题讨论】:

    标签: ruby-on-rails parameters controller persistence


    【解决方案1】:

    您应该可以使用before_filter 和default_url_options 的组合从控制器执行所有操作:

    class MyController < ApplicationController
    
      before_filter :set_a_entity
    
      def set_a_entity
        @a_entity = params['a_entity']
        # or @a_entity = Entity.find(params['a_entity'])
      end
    
      # Rails 3
      def url_options
        {:a_entity => @a_entity}.merge(super)
      end
    
      # Rails 2
      def default_url_options
        {:a_entity => @entity}
      end
    
    end
    

    这并不能解决设置@a_entity 初始值的问题,但可以从任何地方(视图、控制器等)完成。

    如果您希望在多个控制器中传递此参数,您可以将MyController &lt; ApplicationController 替换为ApplicationController &lt; ActionController::Base,它应该也可以工作。

    希望这会有所帮助。

    【讨论】:

    • 我毕竟没有使用你的解决方案,因为我不需要永远为每个控制器保留选项,但基本上它可以完成工作。谢谢,抱歉迟到了。
    • 该解决方案也适用于特定的单个控制器。非常感谢。
    • @F.Filippi 感谢您的提醒,我修改了我的答案,因为单控制器案例确实更有用。
    • 这在一个巨大的项目中帮助了我!非常感谢!
    • 所以,我的问题是,如何使 url_options 在视图中创建的路径中可用。在视图中创建的路径似乎忽略了控制器中设置的 url_options。
    【解决方案2】:

    那为什么不把它放在会话参数中呢?

    session["a_entity"] = "xyz"
    

    这样,您也可以在所有其他控制器中访问它,直到您清除它或它过期。

    更多信息在这里:

    http://api.rubyonrails.org/classes/ActionController/Base.html

    【讨论】:

    • 我想让我的应用程序 RESTful。此外,我发现会话有点棘手,因为存储的 URL 可能会导致不同会话的不同结果。
    • 你能给我们举个例子吗?有点难以想象你的应用是如何与一些通用的想法一起工作的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    相关资源
    最近更新 更多