以这篇文章为出发点的代理:建筑协会通过
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列表是一个多关系的关联通过即
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实例未保存,则无法验证。
我在想沿着线的东西...
@todo_list = cu.user_todos.build.build_to_do(params[:todo_list])
,但正如我在user_todos上面提到的没有得到保存。
非常感谢您的帮助!
Kevin。
你在说'User#todo_lists'和'User#todos',但这些是你调整结构后的两个不同的东西。重命名应该会破坏一切。 – tadman 2010-08-18 13:47:53
啊,我会改变这一点。它仍然不会保存连接! :) – 2010-08-18 14:12:34