2010-10-25 11 views
5

Estoy creando un sitio web de foro, donde cada usuario registrado puede escribir muchas publicaciones y
cada publicación puede tener muchos comentarios.
Además, cada usuario puede comentar cualquier publicación creada por cualquier otro usuario.Rails: ¿El mejor modelo de asociación para usuarios -> publicaciones -> modelo de comentarios en un foro como un sitio web?

 has_many    has_many 
user ------------> Posts -------------- > Comments 
    |          ^
    |           | 
    |    has_many     | 
    |-------------------------------------------   
     belongs_to 
Post ------------> User 
^    ^
    |     | 
    |     | 
    belongs_to  belongs_to 
    |     | 
    |     | 
Comments------------- 

no soy capaz de obtener los datos de usuario de un comentario como "post.comment.user" o
commenter_email = comments.user.email
¿Cómo lograr esto?
pegar mis modelos para la referencia: -

class Comment < ActiveRecord::Base 
belongs_to :post 
belongs_to :user 
end 
class Post < ActiveRecord::Base 
    has_many :comments, :dependent => :destroy 
end 
class User < ActiveRecord::Base 
    devise :database_authenticatable, :registerable, 
    :recoverable, :rememberable, :trackable, :validatable 
    attr_accessible :email, :password, :password_confirmation, :remember_me 
    has_many :posts 
    has_many :comments 
end 

Aquí mi esquema: -

create_table "comments", :force => true do |t| 
t.integer "post_id" 
t.integer "user_id" 
t.text  "comment_text" 
t.datetime "created_at" 
t.datetime "updated_at" 
end 

create_table "posts", :force => true do |t| 
t.integer "user_id" 
t.integer "sell_or_buy" 
t.string "title" 
t.text  "body" 
t.datetime "created_at" 
t.datetime "updated_at" 
end 

create_table "users", :force => true do |t| 
t.string "email", 
t.string "encrypted_password", 
t.datetime "created_at" 
t.datetime "updated_at" 
end 

estoy usando Rails 3.0.1.
por favor sugiera sus ideas.

+0

¿Cómo se crea comentarios? ¿Controlador? –

Respuesta

8

Desde su puesto tiene muchos comentarios, por lo que es post.comments en lugar de post.comment

Desde comments es una lista de comentarios, comments.user no es válida también.

Tendrá id del comentario para que usted pueda encontrar el usuario del comentario específico:

post.comments.find(params[:id]).user 

por supuesto, también se puede llegar a todos los usuarios:

post.comments.all.collect(&:user) 
Cuestiones relacionadas