2010-08-18 3 views
0

가 출발점으로이 문서를 촬영을 통해 함께 프록시합니다 :건축 협회

Rails Way Blog - Association Proxies

def create 
    @todo_list = current_user.todo_lists.build params[:todo_list] 
    if @todo_list.save 
    redirect_to todo_list_url(@todo_list) 
    else 
    render :action=>'new' 
    end 
end 

이에 구체적으로보고하면 사용자

에 소유권을 할당 확인하는 하나의 방법입니다

BUT ToDo 목록이 ToDo 목록과 관련된 다 대다 관계라고 가정합니다. 이 시점에서 즉

def User < AR:Base 
    has_many :user_todos 
    has_many :todo_lists, :through => :user_todos 
end 

를 통해 has_many ...

@todo_list = current_user.todo_lists.build params[:todo_list] 

는하지만 여전히에만 todo_list 조인 저장되지 않고 작동합니다. 어떻게하면 중첩 된 if/else 조인 또는 Todo 인스턴스가 저장 될 때 유효성을 검사하지 않아도 연관 프록시의 기쁨을 얻을 수 있습니다. 나는 user_todos 위에서 언급 한 바와 같이

내가의 라인을 따라 뭔가 생각하고 있었는데 ...

@todo_list = cu.user_todos.build.build_to_do(params[:todo_list]) 

하지만 저장되지 않습니다.

귀하의 도움에 감사드립니다.

케빈.

+0

당신은'User # todo_lists'와'User # todos'에 대해 서로 바꾸어 말할 수 있습니다. 그러나 구조를 조정했기 때문에 이것들은 두 가지 다른 것들입니다. 이름을 바꾸면 모든 것이 깨져야합니다. – tadman

+0

아. 나는 그것을 바꿀 것이다. 그래도 여전히 참여를 저장하지 않습니다! :) –

답변

0

나는 그것이 작동있어이 ...

처음에는 내가 가진 :

@todo_list = @user.todo_lists.build params[:todo_list] 
@todo_list.save! 

이 작동 할 때하여 ToDoList 단순히 사용자 belongs_to하지만, 다 대 다 관계 일 때가 아닙니다. 내가해야 할 일을했을 관계 ...

@todo_list = @user.todo_lists.build params[:todo_list] 
@user.save! 

을 변경하면 이것은 @user, 조인과 @todo_list을 저장.

명백한 나는 생각하지만 궁금하면 원래의 예를해야 또한

current_user.save! 

대신 내가 빌드 뒤에 아이디어는 그 유효성을 검사라고 생각하고 연관 때 저장

@todo_list.save! 

당신은 부모를 저장하므로 Rails Way의 예가 그 지점을 놓치고 있습니까? 아니면 나보다 그렇 겠지?

0

의 라인을 따라 뭔가 일을보십시오 :

current_user.todo_lists << TodoList.new(params[:todo_list]) 
+0

감사합니다. Matt. 나는 빌드와 당신이 정직하게하기 위해 한 일의 차이점을 정말로 이해하지 못했습니다. 이것이 좋은 대답인지 아닌지 확실하지 않습니까?:)하지만 다르게 나를 봐 주셔서 감사합니다. –

+0

그것에 대해 더 생각해보십시오. 빌드를 사용하면 새로운 ToDoList 인스턴스를 한 줄의 변수에 할당 할 수 있습니다. 할 일없이 : @todo_list = ToDoList.new (params [: todo_list]) current_user.todo_lists << @todo_list –