Rails 3.1 - Проблемы с переносом запроса контроллера в область видимости модели - PullRequest
0 голосов
/ 26 февраля 2012

У меня есть запрос в моем контроллере, который работает нормально, но я хотел бы сделать это. Когда я пытаюсь сделать это, я получаю метод not found error. Вот подробности ...

class Post
  has_ancestry  # part of a tree of posts, managed with the Ancestry gem
  attr_accessible :body, :user_id, :published
end

В posts_controller.rb мне нужно получить набор опубликованных записей о братьях и сестрах, без самой записи @post (которую Ancestry включает в результаты 'sibling'). Этот код отлично работает:

def show
  @post = Post.find(params[:id])
  @published_sibs = @post.siblings.where("id <> :id", :id => @post.id).where("published = :published", :published => true)
end

Я пытаюсь переместить этот запрос в область действия в моем файле Post.rb, например:

class Post
  has_ancestry  # part of a tree of posts, managed withthe  Ancestry gem
  attr_accessible :body, :user_id, :published
  scope :published_sibs,  self.siblings.where("id <> :id", :id => self.id).where("published = :published", :published => true)
end

Когда я пытаюсь загрузить Rails, я получаю:

... active_record/base.rb:1088:in `method_missing': undefined method `siblings' for #<Class:0x007fc3d4e33470> (NoMethodError)

Почему родственные отношения драгоценного камня Ancestor доступны в моем контроллере, а не в моей модели? Как я могу перевести этот запрос в область?

1 Ответ

1 голос
/ 26 февраля 2012

проблема в том, что вы работаете с экземпляром класса Post вместо самого класса.

, поэтому @post имеет siblings, а Post - нет!

определения области видимости, вы можете просто выделить ее в метод экземпляра:

def published_sibs
  siblings.where("id <> :id", :id => self.id).where("published = :published", :published => true)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...