以本文为出发点:
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
这是确保您为用户分配所有权的一种方式
但是假设ToDo列表是has_many中关联的多对多关系,即
def User < AR:Base
has_many :user_todos
has_many :todo_lists, :through => :user_todos
end
此时......
@todo_list = current_user.todo_lists.build params[:todo_list]
仍然有效但只保存了todo_list而不是连接。如果连接或Todo实例在保存时不进行验证,如何在没有大量嵌套if / else的情况下获得关联代理的乐趣。
我正在考虑一些类似......的事情。
@todo_list = cu.user_todos.build.build_to_do(params[:todo_list])
但正如我上面提到的,user_todos不会被保存。
非常感谢您的帮助!
凯文。
答案 0 :(得分:0)
尝试按照以下方式行事:
current_user.todo_lists << TodoList.new(params[:todo_list])
答案 1 :(得分:0)
我开始工作了......
起初我有:
@todo_list = @user.todo_lists.build params[:todo_list]
@todo_list.save!
当TodoList只是属于用户而不是多对多关系时,这是有效的。当我改变了我必须做的关系......
@todo_list = @user.todo_lists.build params[:todo_list]
@user.save!
这保存了@ user,join和@todo_list。
显然我想但是我想知道原始的例子是否也应该
current_user.save!
而不是
@todo_list.save!
我认为构建背后的想法是,当您保存父级时,它会验证并保存关联,因此Rails Way处的示例会错过这一点吗?或者更可能是我?