2013-12-17 5 views
0

조인 테이블을 다른 두 테이블의 조인 테이블에 채우려 고합니다. 사용자 ID를 추가하는 것이 상대적으로 쉬운 일이지만 다른 ID는 제공하고 있습니다. 내가 create 메소드에서 발행한다.컨트롤러에서 create 메서드로 조인 테이블을 채우는 방법

UserItems 테이블에는 id가 user_id이고 item_id가 2 테이블 간의 링크로 구성되어있어 다 대다 관계가 가능합니다. 여기

는 a를 user_items_controller.rb의 방법뿐만 아니라

def user_item_params 
    params.require(:user_item).permit(:item_id, :user_id) 
end 

@user_item.item = Item.find(params[:item_id]) 

나는 내가 잘못에 줄 생각되어이 줄의 코드

def create 
    @user_item = UserItem.new(user_item_params) 
    @user_item.user_id = current_user.id 
    @user_item.item = Item.find(params[:item_id]) 


    if @user_item.save 
    redirect_to @user_item, notice: 'successfully created.'   
    else 
    render action: 'new'   
    end  
end 

user_item_params입니다 , 나는 테이블에 올바른 아이템 ID를 채워 넣을 것이라고 생각하지 않습니다.

테스트 구동 개발을 통해이 작업을 수행하고 있습니다. 현재 실패한 테스트는 사용자 또는 항목이 주어진 user_item에 대해 존재하지 않으면 404를 얻게됩니다. 이러한 항목을 찾을 수 없을 때 404가 자동으로 렌더링되기 때문에이 코드 줄을 추가하면 문제가 해결됩니다. 그러나 그들은 그렇지 않습니다.

코드에서 올바른 관계를 설정 했으므로 전체 컨트롤러에서 질문을 혼란스럽게하고 싶지 않았습니다.

언제나 도움을 주시면 감사하겠습니다. 시간을내어 감사드립니다.

+0

가 어디 변수 item' 당신의'@를 설정합니까 사용할 수 있습니까? –

+0

그게 문제예요. @item = Item.find (params [: id])'를 시도했지만 여기서는 @item을 설정하지 않았지만 작동하지 않습니다. 나는 내가 작성한 코드를 남겨 둘 것이라고 생각했습니다. 여기에 가장 단순한 깨진 형태입니다. –

답변

0

당신은 우리에게 어떤 오류 메시지도 보여주지 않았거나 효과가없는 것을 보여 주진 않았지만, 코드에서 튀어 나오는 중요한 점을 발견했습니다.

  1. 당신은 자주 당신은 당신이 새로운 UserItem와를 만드는 경우 어디
  2. @item를 초기화하는 것으로 나타났습니다하지 않는 일반적으로는 current_user.items << @item
  3. 뭔가를 할 거라고는 직접 테이블을 조인 업데이트되지 않습니다 당신의 PARAMS이 올바른지 user_item_params, 당신은 수동으로 속성을 할당 할 필요는 안
정말로 도움이 될 것입니다 것은 정확히 params 해시 GE에, 어떻게 생겼는지 알고있다

당신이 실제로 게시하는 것에 대한 아이디어.

+0

수정 된 질문을 시도하고 명확하게하십시오. 입력에 감사드립니다. –

+0

당신은 무엇을 해야할지 추측하고있는 것처럼 보이고, 추측하여 코드를 작성하지 마십시오. 컨트롤러에서받는 매개 변수를 검사하십시오. Item 객체에 대한 ID를 얻고 있습니까? 그렇다면 매개 변수는 무엇입니까? 양식에서 POST하는 URL은 무엇입니까?등 –

0

당신이 모델이라는 항목이있는 경우에는 연결을

@user_item.item = Item.find(params[:item_id]) 

을 정의 할 경우, 그렇지 않으면

@user_item.item_id = Item.find(params[:item_id]).id 
+0

나는이 두 가지를 테스트했지만 둘 다 내 코드에서 작동하지 않습니다. 테스트 케이스가 여전히 실패합니다. –

+0

이 문제는 테스트 사례에 따라 다르며 코드 –

+0

의 테스트 케이스에 따라 다르지만 필자는 실패 할 것이므로 코드를 전혀 실행하지 않았습니다. 저는 Rspec을 사용하여 전체 애플리케이션을 테스트하고 개발하고 있습니다. –

관련 문제