假设我们有一个rails应用程序,每个页面上都有一个侧边栏,显示一些数据,如帖子档案,帖子类别等。这是在每个控制器上共享相同数据的最佳方式?
Iguess最简单的解决方法是在每个控制器上使用相同的before_action
s,但这不会对我们的代码造成很大的干扰,或者可能将所有这些都转移到父类/ cotrnoller中,所有控制器都会在其中来自,但有更好的方法吗?
答案 0 :(得分:1)
Rails控制器继承自应用程序控制器。
离。
class ClientsController < ApplicationController
您可以将before_actoion
添加到ApplicationController
,将所需数据提取到@variable
,然后在其他控制器中使用该变量。
只是不要过度操作并保持控制器的瘦身:)
答案 1 :(得分:1)
application_controller.rb
作为before_action
。示例强>
# app/controllers/application_controller.rb
before_action :set_sidebar_resources
# ...
private
def set_sidebar_resources
@sidebar_archives = Archive.all
@sidebar_categories = Category.all
end
示例强>
# app/controllers/application_controller.rb
include WithSidebar
# app/controllers/concerns/with_sidebar.rb
module WithSidebar
extend ActiveModel::Concern
included do
before_action :set_sidebar_resources
private
def set_sidebar_resources
@sidebar_archives = Archive.all
@sidebar_categories = Category.all
end
end
end