2010-12-10 47 views
0

J'ai deux modèles, qui sont associés à has_many.Portée Rails3 avec l'association has_many

class User < ActiveRecord::Base 
    has_many :comments 
end 

class Comment < ActiveRecord::Base 
    belongs_to :user 
end 

et le fichier de migration pour créer table commentaires est comme ceci:

class CreateComments < ActiveRecord::Migration 
    def self.up 
    create_table :comments do |t| 
     t.string :body 
     t.boolean :important, :default => false 
     t.references :user 

     t.timestamps 
    end 
    end 
    ... 

Pour afficher la liste des utilisateurs qui ont posté un commentaire important que leur dernier un, j'ai essayé:

scope :have_important, (joins(:comments) & Comment.order('created_at desc')).where('important = ?', true) 

sur l'utilisateur. rb. Mais cela inclut les utilisateurs qui ont posté des commentaires importants comme pas plus tard. Comment puis-je définir cette portée?

test unitaire est ici:

test "Scoped user's latest comment should be important" do 
    User.have_important.each do |user| 
    assert_equal user.comments.last.important, true 
    end 
end 
+0

Je ne suis pas entièrement sûr de ce que vous essayez d'atteindre. Pourriez-vous écrire un test/spec pour cela? – iain

+0

Test unitaire supplémentaire. – JayKay

+0

sur un sujet sans rapport, vous êtes-vous nommé après le meneur de Jamiroquai? J'adore ce groupe :) – Samo

Répondre

1

Le nom "have_important" ne signifie pas vraiment plus tard. Peut-être que ce que vous voulez est deux portées différentes, une pour important et une pour récente. Puis enchaînez-les.