我試圖將我的一些查詢從控制器移動到模型,但我有麻煩,使得它像我想要的那樣乾淨。這裏是我正在使用的機型:Rails:訪問屬於類方法屬於關係的實例屬性
class Post < ActiveRecord::Base
belongs_to :account
def self.recent_posts(account=nil)
if account.nil? || account.tags.nil?
results = where(:published => true).order('created_at DESC').limit(5)
else
results = tagged_with(account.tags).where(:published => true).order('created_at DESC').limit(5)
end
end
end
class Account < ActiveRecord::Base
has_many :posts
end
然後在我打電話像posts = account.posts.recent_posts(account)
控制器。
但是,在我看來,應該有一些方法來訪問account.tags
而不必將account
實例傳遞給account.posts.recent_posts
類方法。有沒有,還是我正在接近這個錯誤的方式?謝謝!
首先使用實例方法並調用類方法是有意義的。唯一的問題是我無法弄清楚如何在諸如'account.posts.instance_method'的控制器中調用實例方法。我猜這是因爲當時沒有「Post」模型的實例。 –
您需要一次對一個或多個帖子進行操作。例如:'account.posts.collect(&:recent_posts).flatten'可以工作,但它可以變得更有效率。 – tadman