Проблема Rails при назначении метода объекту - PullRequest
0 голосов
/ 13 сентября 2011

Я понимаю, что это немного новичок. Я пытаюсь определить метод 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>. Какие-нибудь мысли? Спасибо.

UPDATE

class User < ActiveRecord::Base
  has_many :notices, :dependent => :destroy

class Notice < ActiveRecord::Base
  belongs_to :user

Ответы [ 2 ]

3 голосов
/ 13 сентября 2011

Используйте область действия в модели уведомления:

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 голос
/ 13 сентября 2011

Название отношения - «извещения», а не «непрочитанные заметки». Чтобы отфильтровать unread_notices по пользователю, вы можете определить область действия в модели пользователя примерно так:

Class Notice < AR::Base
  belongs_to :user
  scope :unread_notices, lambda {
    where(:read => false)
  }
end

Подробнее здесь: http://edgerails.info/articles/what-s-new-in-edge-rails/2010/02/23/the-skinny-on-scopes-formerly-named-scope/index.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...