J'ai trois modèles (pertinents), spécifié comme ceci:rails map.resources avec has_many: through ne fonctionne pas?
class User < ActiveRecord::Base
has_many :posts
has_many :comments
has_many :comments_received, :through => :posts, :source => :comments
end
class Post < ActiveRecord::Base
belongs_to :user
has_many :comments
end
class Comment < ActiveRecord::Base
belongs_to :user
belongs_to :post
end
Je voudrais être en mesure de faire référence à tous les comments_received
pour un user
avec un itinéraire - disons que ce soit pour l'approbation des lots de commentaires sur tous les messages. (Notez que vous pouvez également obtenir comments
faite par le user
, mais les utilisateurs ne peuvent pas commenter sur leurs propres messages, de sorte que le comments
par le biais d'un post
sont différents et s'excluent mutuellement). Logiquement, cela devrait fonctionner avec:
map.resources :users, :has_many => [:posts, :comments, :comments_received]
Cela devrait me donner des itinéraires de
user_posts_path
user_comments_path
user_comments_received_path
Les deux premiers travaux, le dernier ne fonctionne pas. Je l'ai essayé sans le _
en comments_received
en vain. Je cherche à obtenir une URL comme
http://some_domain.com/users/123/comments_received
J'ai aussi nicher essayé, mais peut-être que je fais ce mal. Dans ce cas, je pense que la carte serait:
map.resources :users do |user|
user.resources :comments
user.resources :posts, :has_many => :comments
end
et l'URL pourrait être:
http://some_domain.com/users/123/posts/comments
Peut-être que c'est la bonne façon de le faire, mais je la mauvaise syntaxe ? Est-ce que je pense à ceci de la mauvaise manière? Il me semble raisonnable que je devrais pouvoir obtenir une page de tous les comments
ajoutés à tous les messages d'un utilisateur.
Merci pour votre aide!
OK, ce n'est pas exactement ce que je fais, mais il est assez proche pour appeler Foo un utilisateur, Bar un message, Baz un commentaire, et xxx est "reçu". L'objectif est d'obtenir un itinéraire qui affiche tous les commentaires sur tous les messages d'un utilisateur donné, en notant que les utilisateurs ne peuvent pas commenter leurs propres messages. –