2013-06-20 5 views
1

У меня есть объект Event с belongs_to ассоциацией location:Обновление объекта belongs_to ассоциации создает новые объекты

class Event < ActiveRecord::Base 
    belongs_to :location 
    accepts_nested_attributes_for :location 
end 

В моей форме событий я использую вложенные атрибуты для отображения формы местоположения. Соответствующий бит формы местоположения от events/_form.html.erb:

<%= f.fields_for :location do |lf| %> 
    <%= f.label 'Location', :class => 'control-label' %> 
    <%= lf.text_field :name %> 
    <%= lf.text_field :address %> 
<% end %> 

создать новое событие следующим образом:

def new 
    @event = Event.new 
    @event.build_location 
    end 

Однако, когда я изменить местоположение этой вновь созданной записи, запись о местоположении не получает отредактированный , вместо этого новая запись местоположения будет вставлена ​​в базу данных.

Мой вопрос: как я могу убедиться, что после редактирования местоположения (из родительской формы события) он будет обновлять атрибуты, принадлежащие объекту местоположения, вместо создания нового объекта Location.

+0

быстро расположение вопроса имеет много событий, вставить вид code.Do вы хотите место должно быть созданы на каждом событии или о создании места проведения мероприятия должно быть выбрано из существующего – Amar

+0

пользователя может выбрать местоположения из списка. Если место еще не установлено, оно должно быть создано. Если он находится в списке, следует сохранить только ассоциацию. –

+0

В вашем классе 'Местоположение' есть' has_many: events' или 'has_one: event' в нем? – rudolph9

ответ

1

Я нашел решение, оно было добавлено :update_only => true в ассоциацию. Код для модели становится:

class Event < ActiveRecord::Base 
    belongs_to :location, :update_only => true 
    accepts_nested_attributes_for :location 
end 
+1

Я думаю, что ': update_only' должен быть присвоен' accepts_nested_attributes_for', а не 'принадлежит_to'. – peter

Смежные вопросы