2011-10-20 3 views
0

에는 몇 가지 조언이 필요합니다. RoR에 대한 프로젝트를 진행하고 있으며 모델간에 어떤 관계를 사용해야하는지 잘 모릅니다. 나는 사용자, 게시판 및 메시지라는 세 가지 모델을 가지고 있습니다. 시작은 아주 간단합니다 : 사용자는 하나의 벽을 가지고 있으며, 그것은 사용자에 속하는, 그래서 나는이되어야합니다 같아요Ruby on Rails 모델 관계

class User < ActiveRecord::Base 
    has_one :board 
end 

class Board < ActiveRecord::Base 
    belongs_to :user 
end 

마지막 모델은 메시지이며, 여기에 내 문제를 온다. 메시지는 사용자가 작성한 것으로서 사용자가 글을 쓴 것이지만 벽에 쓴 이유이기도합니다 (다른 사용자가 속한 벽일 수도 있습니다).

나는 간단한 솔루션을 사용 :

class Theme < ActiveRecord::Base 
    belongs_to :board 
    belongs_to :user 
end 

class User < ActiveRecord::Base 
     has_one :board 
     has_many :themes 
end 

class Board < ActiveRecord::Base 
     belongs_to :user 
     has_many :themes 
end 

을하지만 그것으로 만족하고 완벽하지이라고 생각하지. 그 경험이 많은 사람들을 위해 어려운 일이 아니다 나는 희망

를 (이 USER_ID 필드를 기입하지 않습니다 지금)

user.themes.create(:board => @board) 

: 나는 나를 쓸 수하는 솔루션을 찾고 있어요처럼 생각 Ruby on Rails 모델에서 나보다. 고마워, 고마워.

답변

0

정상적으로 당신은 devise 같은 인증 보석을 사용합니다. 그런 다음 현재 작업을 호출중인 사용자의 객체를 포함하는 current_user 변수가 있습니다. 사용자가 주제를 만들 때

그런 다음 사용자를 설정하는 컨트롤러에 하나의 간단한 줄을 추가 :

@theme.user = current_user 

또한 cenral 파일의 권한을 관리 할 수 ​​캉캉 같은 보석을 사용해야합니다.

http://railscasts.com/episodes/192-authorization-with-cancan

+0

내가이 보석을 사용하는 것이 좋습니다 이해하지만 이미 나는 마이클 하틀의 레일 튜토리얼에 루비에서 촬영 한 간단한 사용자 모델을 가지고 : 여기 railscast을 찾을 Youl. 당신이 제안하고있는 것을 할 수는 있지만, 단순한 다 대일 관계에서와 같이 라인이 불필요한 솔루션을 찾고 있습니다. 도움을 주셔서 감사합니다 – leonprou

+0

이 문제를 다루는 몇 줄을 추가해야합니다. 안전한 대안이 없습니다! 왜냐하면 user_id를 제공하는 숨겨진 필드를 광고 할 수는 있지만 POST 및 GET을 통해 제공된 모든 데이터를 조작 할 수 있기 때문에 euser를 통해 클라이언트에 대한 제어권을 제공합니다! – davidb

+0

실은 예상치 못한 방식으로 내 솔루션이 내가 원하는대로 작동했습니다. 귀하의 충고에 감사 드리며 앞으로도 구현할 것입니다. – leonprou