Расширяя страницу недавних_постов_on_self ниже, Я хочу добавить метод all_recent_posts_on_self , но я не уверен, возможно ли с использованием синтаксиса self.posts.find . С другой стороны, all_recent_posts_on_class кажется простым.
class User < ActiveRecord::Base
has_many :posts, :class_name => "Post" , :foreign_key => "author_id"
has_many :comments, :class_name => "Comment", :foreign_key => "author_id"
def recent_posts_on_class
Post.find( :all, :conditions => ['author_id = ?', self.id],
:order => 'created_at asc', :limit => 5)
end
def recent_posts_on_self
self.posts.find(:all, :order => 'created_at ASC', :limit => 5)
end
end
В приведенном выше примере у меня есть два способа найти последние сообщения в блоге, связанные с пользователем. Я могу позвонить в Post.find и передать его author_id, или я могу вызвать self.posts.find, и мне не нужно передавать идентификатор автора. Я предполагаю, что это связано с тем, что в последнем случае self.posts уже был ограничен на основе первичного ключа объекта пользователя и has_many: сообщений, связанных с этим пользователем. Это преимущество в этом случае, потому что мне не нужно переходить к проблеме передачи author_id в качестве аргумента. Но если бы мне не нужно было ограничивать запрос по автору, можно ли было бы создать all_recent_posts_on_self для этого?
То, о чем я говорю, является эквивалентом этого метода (который пропускает: условия):
def all_recent_posts_on_class
Post.find(:all, :order => 'created_at asc', :limit => 5)
end
Но с использованием self.posts.find вместо Post.find :
def all_recent_posts_on_self
self.posts.find(...)
end
Также:
Даже если для этого можно использовать self.posts.find, лучше ли использовать Post.find?