Rails - позволяют модели связываться с существующими объектами или создавать новые - PullRequest
0 голосов
/ 22 июня 2011

Допустим, у меня есть две модели, Event и Person. Координатором мероприятия является человек:

class Event < ActiveRecord::Base
    belongs_to :coordinator, :class_name => 'Person', :foreign_key => 'coordinator_id'
    accepts_nested_attributes_for :coordinator
end

class Person < ActiveRecord::Base
    validates :name, :length => 20
end

В своей форме я хотел бы позволить пользователю выбирать из существующих объектов People (скажем, список переключателей), но также иметь текстовое поле для создания нового Person (с именем, введенным в текстовом поле) .

Как бы я это элегантно реализовал? Я могу понять это, но в нем много уродливого кода в контроллере, и его сложно проверить.

Ответы [ 2 ]

2 голосов
/ 22 июня 2011

Я сделал нечто подобное, в котором переключатели установили person [id], а затем я просто проверил идентификатор.

Так в моем контроллере # метод create:

if params[:person][:id]
   @person = Person.find(params[:person][:id])
else
   @person = Person.new(params[:person])
   #Handle saving @person here.
end

Возможно, вам придется удалить параметр id в блоке else, если форма отправляет его, даже если ничего не выбрано.

Изменить, чтобы ответить на вопрос проверки:

В #Handle saving @person here. вы будете делать то, что обычно делаете для создания объекта. Нравится:

if @person.save
  flash[:notice] = "User created successfully"
else
  render :action => 'new' # (or whatever the action is)
  return
end
0 голосов
/ 22 июня 2011

Код проверки личности будет выполняться каждый раз, когда вы сохраняете человека.Чтобы сохранить без проверки, напишите @ person.save ( false ).Надеюсь, что это интегрирует ответ pcg79

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