Rails控制器中的持久参数

时间:2011-08-03 08:07:05

标签: ruby-on-rails parameters controller persistence

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

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

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

2 个答案:

答案 0 :(得分:9)

您应该可以使用before_filterdefault_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 < ApplicationController替换为ApplicationController < ActionController::Base,它也可以正常工作。

希望这有帮助。

答案 1 :(得分:2)

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

session["a_entity"] = "xyz"

这样你就可以在所有其他控制器中访问它,直到你清除它或它到期为止。

更多信息:

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