我意识到这是一个新手问题。我正在尝试定义方法unread_notices
,然后为current_user
调用它。这就是我所拥有的:
module ApplicationHelper
def unread_notices
Notice.where("read" => false)
end
def current_user
User.find(session[:user_id])
end
application.html.erb:
<li><%= link_to "Notices (#{current_user.unread_notices.count})", notices_path %></li>
unread_notices
有效,直到我使用current_user
对其进行过滤,然后显示undefined method 'unread_notices' for #<User:0x110dd0f48>
。有什么想法吗?谢谢。
更新
class User < ActiveRecord::Base
has_many :notices, :dependent => :destroy
class Notice < ActiveRecord::Base
belongs_to :user
答案 0 :(得分:3)
在通知模型中使用范围:
class Notice < ActiveRecord::Base
belongs_to :user
scope :unread, where("read" => false)
end
并像这样使用它:
<li><%= link_to "Notices (#{current_user.notices.unread.count})", notices_path %></li>
答案 1 :(得分:1)
关系的名称是'notices'而不是'unread_notices'。为了按用户过滤unread_notices,您可以在User模型中定义范围,如下所示:
Class Notice < AR::Base
belongs_to :user
scope :unread_notices, lambda {
where(:read => false)
}
end