Построение ассоциации прокси с помощью - PullRequest
0 голосов
/ 18 августа 2010

Взяв эту статью за отправную точку:

Rails Way Blog - Прокси-серверы ассоциации

и, в частности, глядя на

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, а не объединение. Как я могу получить удовольствие от прокси-серверов ассоциации, не имея большого количества вложенных элементов, если / иначе не нужно проверять экземпляр join или Todo при сохранении.

Я думал о чем-то вроде ...

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

но, как я упоминал выше, user_todos не сохраняются.

Ваша помощь очень ценится!

Кевин.

Ответы [ 2 ]

0 голосов
/ 19 августа 2010

Я получил это работает ...

Сначала у меня было:

@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, объединение и @ todo_list.

Я полагаю, очевидно, но тогда мне интересно, должен ли исходный пример также

current_user.save!

вместо

@todo_list.save!

Я думал, что идея build заключается в том, что он проверяет и сохраняет ассоциации, когда вы сохраняете родителя, так что пример на Rails Way упускает смысл? или, скорее, я?

0 голосов
/ 19 августа 2010

Попробуйте сделать что-то вроде:

current_user.todo_lists << TodoList.new(params[:todo_list])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...