2012-05-24 97 views
0

这些机型:Rails的嵌套形式多层次

class Question < ActiveRecord::Base 
    attr_accessible :title, :description, :inquiries_attributes 

    has_many :replies 

    has_many :groups, :through => :question_groups 
    has_many :question_groups 

    has_many :inquiries 
    accepts_nested_attributes_for :inquiries, :allow_destroy=>true, 
          :reject_if=>:all_blank 

    belongs_to :user 
    belongs_to :last_user, :class_name => "User", :foreign_key => "last_user_id" 

    acts_as_by_user 

    default_scope order("created_at DESC") 

    acts_as_publicable 

    checkboxes_for :groups 

end 

class Inquiry < ActiveRecord::Base 

    attr_accessible :title, :question_id, :inquiry_type_id, :inquiry_options_attributes 

    belongs_to :question 
    belongs_to :inquiry_type 
    has_many :inquiry_options 
    accepts_nested_attributes_for :inquiry_options, :allow_destroy=>true, 
          :reject_if=>:all_blank 
    has_many :inquiry_replies 
end 

class InquiryOption < ActiveRecord::Base 

    attr_accessible :content, :inquiry_id 

    belongs_to :inquiry 

end 

这是视图:

<%= nested_form_for [:admin, @question] do |f| %> 
    <%= f.error_messages %> 
    <p> 
    <%= f.label :title %><br /> 
    <%= f.text_field :title %> 
    </p> 
    <p> 
    <%= f.label :description %><br /> 
    <%= f.text_area :description %> 
    </p> 
    <%= f.fields_for :inquiries do |inquiry_form| %> 
    <p> 
     <%= inquiry_form.label :title %><br /> 
     <%= inquiry_form.text_area :title, :size=>"40x5" %><br /> 
     <%= inquiry_form.label :inquiry_type %><br /> 
     <%= collection_select(inquiry_form, :inquiry_type_id, InquiryType.all, :id, :name, options ={:prompt => "Seleziona una tipologia"}) %><br /> 

     <%= inquiry_form.fields_for :inquiry_options do |inquiry_option_form| %> 
     <p> 
     <%= inquiry_option_form.label :content %><br /> 
     <%= inquiry_option_form.text_area :content, :size=>"40x5" %><br /> 
     <%= inquiry_option_form.link_to_remove "Rimuovi risposta" %> 
     </p> 
    <% end %> 
    <p><%= inquiry_form.link_to_add "Aggiungi risposta", :inquiry_options %></p> 

    <%= inquiry_form.link_to_remove "Rimuovi domanda" %> 
    </p> 
    <% end %> 
    <p><%= f.link_to_add "Aggiungi domanda", :inquiries %></p> 
    <p> 
    <%= f.checkboxes_for :groups %> 
    </p> 
<p><%= f.submit %></p> 
<% end %> 

在第二个层面,如果我想添加超过1 inquiry_option,只有第一被保存。 我看到,当我添加多个查询选项时,第二个查询选项具有与第一个查询选项相同的名称属性,因此当我提交他时,只有第一个被保存。 我该如何解决它?

+0

请出示其正从您的形式构建了您的PARAMS哈希值。 – thesis

回答

2

如果你想要多个值,你需要在控制器中“建立”它们。使用你的榜样,你应该添加下列到您new方法questions_controller.rb

2.times do 
    @question.inquiries.build 
end 

这将建立你2个查询