Rails 3 - Контроллер создает действие с отношением «многие ко многим» - PullRequest
0 голосов
/ 29 августа 2011

У меня есть отношение многие ко многим между двумя моделями, списками и пользователями.

Когда пользователь создает список, он должен автоматически добавить его в массив User.lists.Прямо сейчас у меня это работает, но пахнет немного:

def create
    @list = current_user.lists.new(params[:list])
    current_user.lists << @list

Есть ли способ свести это к одной строке?Не передать @list в коллекцию с помощью <<, но будет ли он автоматически при создании нового списка? </p>

Спасибо

Ответы [ 2 ]

2 голосов
/ 29 августа 2011

Вы просто должны сделать это:

@list = current_user.lists.create(params[:list])
0 голосов
/ 03 ноября 2011

Я предлагаю немного другой подход, чтобы помочь приспособиться к вашим проверкам.

def create
  @list = current_user.lists.new(params[:list])
  respond_to do |format|
    if (current_user.lists << @list rescue false)
      format.html {...}
    else
      format.html {...}
    end
  end
end

Большая разница в том, что

current_user.lists << @list

возвращает список, если он успешно сохраняется (интерпретируется как истина, если результат не ложь или ноль), и исключение, если оно не выполняется, который вы спасаете и возвращаете ложь. Это заменяет традиционные

@list.save

, который возвращает true из false и ноль, если это не так. Правильная настройка логики для оператора if внутри блока response_to.

И это уменьшает ваши строки кода на 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...