2009-02-05 2 views
1

많은 항목이있는 사용자 모델이 있습니다. 등급은 사용자 및 항목에 속합니다.이 연결된 통화 만들기가 작동하지 않는 이유는 무엇입니까?

DB에서 ratings.user_id를 NULL이 아니게 설정했습니다.

내가 항목을 만드는 오전 때, 나는이 일을하고 싶습니다 :

def create 
    current_user.items.create(params[:item]).ratings.create(params[:rating] 
    redirect_to items_path 
    end 

그러나, 이것이 SQL 오류로 balks

그래서 난으로 만드는 방법을 다시 썼다 "nil을 USER_ID가 될 수 없다"

def create 
    current_user.items.create(params[:item]).ratings.create(params[:rating].merge({:user_id => current_user})) 
    redirect_to items_path 
    end 

잘 작동합니다.

그러나 현재 사용자의 수신자로부터 작성 메소드를 연결하면 등급의 user_id가 채워 졌을 것이라고 생각했습니다. 왜 아무도 몰라요?

TIA.

답변

1

가능하면 데이터베이스에서 정규화하는 것이 좋습니다. 어쩌면 등급 테이블에서 USER_ID 속성을 가지고 당신이 당신의 모델을 필요로하는 경우를 통해 얻을 A A 사용하여 조인 방법을 통해 당신이 만든 항목을 저장 한 경우

class Rating 
    has_many :items 
    has_one :user, :through=>:items 
+0

Jeremy에게 감사드립니다. 나는 이것을 시도 할 것이다. 내가 알고있는 초보자 질문의 비트. –

+0

그냥 궁금해 : 등급이 항목에 속해 있지 않고, 항목이 많지 않습니까? –

+0

네가 맞다. 나는 그저 당신에게 줄 의도가있는 그 줄에 대해별로 생각하지 않았다. 예제를 통해 – Jeremy

0

항목에 많은 평점이 있으며 해당 연결에서 사용자 ID를 알 수 없기 때문입니다. 연관 체인 Item이 사용자에게 속해 있기 때문에 Item이 사용자 ID를 가질 것이라고 가정 할 때. 등급에는 상품에 속한 항목 ID가 포함됩니다. 그러나 Item to Rating 어소시에이션은 사용자가 말하지 않는 한 사용자에 대해 아무것도 모릅니다.

1

는, 그 항목으로 평가했다 , 등급에 따라 사용자를 전달하지 않을 것입니다. 맞습니까? 당신은 단지 @ rating.item.user라고 언급 할 것입니다, 그렇죠?

이렇게 생각하면 current_user를 통해 생성 된 항목이 등급에 따라 사용자 정보를 전달할 것으로 기대하지 않을 것입니다.

정말 사용자 has_many 등급 관계가 필요한지 궁금하게 생각하십시오.

관련 문제