以這篇文章爲出發點的代理:建築協會通過
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