2012-03-29 3 views
0

사용자가 게시물을 만들 수 있습니다. 게시물에 댓글이 있습니다. 댓글은 사용자와 게시물 모두에 속해야하지만 반드시 게시물을 만든 사용자는 아닙니다.세 모델 간 has_many 관계에 id 설정

class User < ActiveRecord::Base 
    has_many :posts 
    has_many :comments 
end 

class Post < ActiveRecord::Base 
    belongs_to :user 
    has_many :comments 
end 

class Comment < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :post 
end 

그렇다면, 보장하기위한 가장 좋은 방법은 무엇 :

  1. user.comments.new 호출 할 수없는이 모델에 가장 좋은 방법은 다음과 같다. 나는 모든 새로운 포스트가 그들이 연관되는 post을 사용하여 창조되기를 바란다.
  2. 적절하게 설정 주석을 작성하는 사용자의 id에게 그렇지 않으면

post.comments.new를 호출,이 관계를 모델링 할 수있는 더 좋은 방법은 무엇입니까?

답변

1

모델에 문제가 없습니다.

이 주석의 저자을 설정하려면, 당신은 당신의 컨트롤러에 그렇게해야 할 것 :
@comment = post.comments.new do |c| 
    c.user = current_user 
end 

그냥 user.comments.new를 사용하지 않습니다. 왜 그것을 사용하는 것을 불가능하게 만들고 싶습니까?

+0

모델 구조를 확인해 주셔서 감사합니다. 내 컨트롤러에서 그런 것을 할 계획 이었지만 "레일 방식"등으로 간주되었는지 확인하고 싶었습니다. 나는 user.comments.new를 호출하는 것을 불가능하게 할 필요는 없지만, 그것을 사용할 수있게 남겨 두었다 (즉, 쓸모 없게 만드는 원숭이 패치가 아닌) 괜찮은 것으로 간주되었다. 다시 한번 감사드립니다. –

+0

예, 그냥두고도 괜찮습니다. 또한 새로운 액션이나 생성 액션에서'user.comments.new'를 사용하고 있습니까? 일반적으로 연관에서 객체를 만들 때는'new' 대신'build'를 사용해야합니다. 최근의 레일즈 버전에서는 두 가지 모두 작동하지만'build'는 객체를 게시물의 주석 컬렉션에 추가하고이를 메모리에 유지합니다. 모든 세부 사항에 대해 확실하지 않으면 Google에서 차이점을 검색하고 직접 결정할 수 있습니다.) – Robin

+0

오른쪽 - 관계와 관련하여 newbuild의 차이점을 알고 있습니다. 다시 한 번 감사드립니다. –