Допустим, у меня есть модель User
и модель Invoice
с ассоциацией belongs_to :user
.
Теперь я создаю new
действие для моего InvoicesController
и представление, которое будет отображено. Представление будет иметь элемент select для выбора пользователя, которому будет принадлежать этот счет.
Так что мне нужно где-то получить этих пользователей; мой инстинкт должен оставить такие вещи вне поля зрения. Я заканчиваю с этим:
def new
@users = User.all
end
Действие отправки формы: create
. Когда по какой-то причине создание не удается, я перерисовываю представление действия new
.
def create
invoice = Invoice.new params[:invoice]
if invoice.save
flash[:notice] = 'Invoice created!'
redirect_to :action => 'show', :id => invoice.id
else
@users = User.all
render :action => 'new'
end
end
Но, как вы видите, для повторного рендеринга действия new
я должен снова вызвать пользователей.
Это всего лишь пример, но учтите, что у меня есть несколько форм с несколькими элементами select, заполненными из базы данных, или аналогичными конструкциями. Это превращается в ужасное количество повторений.
Так как мне структурировать свой контроллер в этой ситуации?
- Должен ли я просто использовать
User.all
с моей точки зрения?
- Должен ли я позвонить
new
из create
, чтобы сделать выборку для меня?
- Или что-то еще?