0

Models associations are

document.rb

has_many :sections
accepts_nested_attributes_for :sections, :allow_destroy => :true, :reject_if => proc { |attrs| attrs.all? { |k, v| v.blank? } }

section.rb

belongs_to :document
has_many :paragraphs, :dependent => :destroy
has_many :contents :through => :paragraphs
validates :user_id, :presence =>  { :message => "Must be filled" }

paragraph.rb

attr_accessible :user_id, :section_id, :content_id
belongs_to :section
belongs_to :content
validates :user_id, :section, :content, :presence =>  { :message => "Must be filled" }

paragraphs table just like a intermediate table for sections and contents and I want to save records in documents, sections and paragraphs table using single submission. So I designed form as like

_form.html.erb

<%= form_for @document, :validate => true do |f| %>
    <%= f.error_messages %>
    <%= f.text_field :name %>
    <% f.fields_for :sections do |builder| %> 
   <%= builder.text_field :name %>
   <%= builder.select :content_ids .... {:multiple => true} %>
    <% end %>
<% end %>

example parameters when submiting the form

{"document"=>{"name"=>"sdf", "sections_attributes"=>{"0"=>{"name"=>"sdf", "description"=>"sdf", "_destroy"=>"0", "content_ids" => ["1", "2"]}}, "commit"=>"Update Document", "id"=>"3"}

In additionally, I am updating current_user's id to user_id column of paragraphs table.

update

@document = Document.find(params[:id])
@document.attributes = params[:document]
@document.sections.each {|section| 
  section.user_id = current_user.id 
  section.paragraphs.each {|paragraph| paragraph.user_id = current_user.id}
}
if @document.save!
  # success
else
  render :action => 'edit'
end

I got "Validation failed: User Must be filled".

Is validation triggered when assigning attributes using object.attributes= as above

How to assign the value to user_id in paragraph object before calling save method

4

1 回答 1

0

可能有帮助。

<%= f.hidden_field :user_id, value: current_user.id %>
于 2013-03-14T13:40:42.877 回答