2010-10-04 3 views
1

У меня есть вложенный-типовая форма с соотношением один-ко-многим между командным игроком класса проектом и классом, а в контроллере, функция обновления, как:вложенная форма модели и update_attributes

@project = Project.find(params[:id])

@project.update_attributes(params[:project])   

Теперь я хотел бы установить некоторые поля, которые не заданы в форме для некоторых членов команды до того, как произойдет спасение. Я не могу использовать функцию update_attributes, как это сделать.

Какой был бы лучший способ сделать это?

Thanks, Nicolas.

ответ

1

Я бы посмотрел на функцию accepts_nested_attributes_for. Вы могли бы иметь что-то вроде:

class Project < ActiveRecord::Base 
    has_one :team 
    accepts_nested_attributes_for :team 

    # also this will be useful 
    validates_associated :team 
end 

В ваших форм вы хотите использовать метод fields_for гнездиться свои атрибуты. Это может выглядеть примерно так:

<% form_for(@project) do |p| %> 
    <%= p.error_messages %> 
    <!-- Project name --> 
    <%= p.text_field :name %> 

    <% f.fields_for(@project.team) do |t| %> 
    <!-- Team Name --> 
    <%= t.text_field :name %> 
    <% end %> 

    <%= f.submit 'Create Project' %> 
<% end %> 

При отправке формы вы сможете позвонить @project.update_attributes(params[:project]) и он будет работать. Вы также можете указать raise params.inspect, как вставлять параметры.

Надеюсь, это поможет.

+0

Спасибо за ответ. На самом деле, в контроллере я хотел использовать @ project.attributes = params [: project], затем изменить некоторые поля и только затем сохранить. (поэтому не используя напрямую @ project.update_attributes). Но это не с Rails 2.3.8. Я наконец нашел причину (https://rails.lighthouseapp.com/projects/8994/tickets/4766-nested_attributes-fails-to-updatedestroy-when-association-is-loaded-between-setting-attributes-and-saving- родитель) –

+1

Николас, вы должны добавить это как ответ и ответить на свой вопрос, если это проблема. Я думаю, что эта ошибка также та же проблема, что и у меня. – DJTripleThreat

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