2012-09-22 54 views
0

我有一個新幼兒園嵌套形式

<%= form_for @kindergarten, :html => {:multipart => true} do |f|%> 

       <%= render 'shared/error_messages', object: f.object %> 
      </br> 
       <%= f.fields_for :photos do |p| %> 
        <%= p.label 'upload photo'%> 
        <%= p.file_field :image %> 
       <% end %> 
      </br> 
       <%= render 'about_company', f: f%> 
      </br> 
       <%= render 'contact', f: f %> 
       <%= f.submit "Create my account", class: "btn btn-large btn-primary" %> 
      <%end%> 

這背後的邏輯是,1所幼兒園可以有多個照片以下形式聲明。

這裏是模型聲明:

幼兒園

has_many :photos, limit: 7, dependent: :destroy 
accepts_nested_attributes_for :photos 

照片

attr_accessible :image, :logo, :kindergarten_id 
    belongs_to :kindergarten 
    mount_uploader :image, ImageUploader 

    validates :kindergarten_id, presence: true 
    validates :photo, presence: true 

我與這個掙扎了幾個小時,現在,我不明白爲什麼「上傳文件「按鈕和標籤不顯示。當我說現在顯示,我的意思是他們完全被忽略,不呈現在呈現的HTML。

回答

1

之前渲染的形式爲新@幼兒園,你需要建立一個照片協會這個工作:

def new 
    @kindergarden = Kindergarden.new 
    @kindergarden.photos.build # provides a photo object to use in the form 
    # rest of your action 
end 

另外,如果你在表單希望多個照片領域,你可以這樣做是這樣的:

5.times { @kindergarden.photos.build } 
+0

現在我得到這個錯誤:'未定義的方法「照片」的零:NilClass' –

+1

我不能告訴你在哪裏得到這個錯誤。您需要提供更多信息。 – rossta

+0

它只是這樣的:'app/controllers/kindergartens_controller.rb:5:'new''。我也更新了控制器內的新動作,現在看起來像這樣:'def new @kindergarten = Kindergarten.new @ kindergarden.photos.build end' –