我正在 Rails 中制作控制面板(用户帐户)。在布局中,我需要显示消息或通知(类似 Facebook 的样式)之类的内容。问题是这些东西需要访问数据库,我不确定将代码放在哪里,因为它与控制器无关,但布局与多个控制器共享。
那么我应该将代码放在从数据库中获取消息的最佳位置在哪里(我认为它不正确),或者作为助手?
我正在 Rails 中制作控制面板(用户帐户)。在布局中,我需要显示消息或通知(类似 Facebook 的样式)之类的内容。问题是这些东西需要访问数据库,我不确定将代码放在哪里,因为它与控制器无关,但布局与多个控制器共享。
那么我应该将代码放在从数据库中获取消息的最佳位置在哪里(我认为它不正确),或者作为助手?
最好的解决方案是构建一个控制面板控制器来处理身份验证和权限,并从数据库中加载常见的用户数据,例如消息......这是一个示例代码
class ControlPanelController < ApplicationController
before_filter :authenticate_user!
before_filter :get_user_data
helper_method :mailbox
authorize_resource
protected
def get_user_data
@header_conversations=mailbox.inbox.limit(3)
@uevents= Event.scoped
@uevents= @uevents.after(Time.now)
end
def mailbox
@mailbox ||= current_user.mailbox
end
end
然后我的网络应用程序中的所有类都扩展了这个类:)
我发现一种方法是使用 before_filter。通过在 ApplicationController 中定义过滤器(以便您可以从任何控制器访问它)。
class ApplicationController < ActionController::Base
# ..
protected
def load_messages
@messages = Message.all
end
end
然后在任何控制器中:
class FooController < ApplicationController
before_filter :load_messages
def index
# @messages is set
end
end