Rails 控制器中的持久参数

发布于 2024-11-27 09:57:38 字数 209 浏览 1 评论 0原文

有什么方法可以在 Rails 控制器中保留(保留)参数吗?它应该传递到每个操作,然后传递到每个视图和每个链接。

示例情况: 我有实体 A 及其控制器。此外,我还有另一个依赖于 A 的实体 B。我需要经常访问“父”A 实体,因此我希望将其保留为

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

is there any way to persist (preserve) parameters in Rails controller? It should be passed to every action, then to every view and every link.

Example situation:
I have entity A with its controller. Besides, I have another entity B which is dependent on A. I need to access the "parent" A entity very often, so I'd like to have it still as

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

蘸点软妹酱 2024-12-04 09:57:38

您应该能够使用 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 < ApplicationControllerApplicationController < ActionController::Base 它应该也能工作。

希望这有帮助。

You should be able to do everything from your controller, using a combination of before_filter and 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

This doesn't solve the problem of setting the initial value of @a_entity, but this can be done from anywhere (view, controller, etc).

If you want this parameter passed around in multiple controllers, you can replace MyController < ApplicationController with ApplicationController < ActionController::Base and it should work as well.

Hope this helps.

烙印 2024-12-04 09:57:38

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

session["a_entity"] = "xyz"

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

更多信息在这里:

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

why not put it in a session parameter then?

session["a_entity"] = "xyz"

that way you can access it in all your other controllers too until you clear it or it expires.

more info here:

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文