I'm using nested attributes, but the fields aren't loaded in my view. Someone know what I missing?
Rails 3.1, Ruby 1.9.2
Model 1:
class Traditions::Material < ActiveRecord::Base
has_one :material_asset, :dependent => :destroy
validates_presence_of :title
accepts_nested_attributes_for :material_asset
end
Model 2:
class Traditions::MaterialAsset < ActiveRecord::Base
belongs_to :material
has_attached_file :asset
validates_attachment_presence :asset
end
View (HAML):
= form_for @material, :html => {:class => 'form', :multipart => true} do |f|
= errors_for @material
.field
= f.label :title
= f.text_field :title
.field
= f.label :description
= f.text_area :description, :rows => 5
.field
= f.fields_for :material_asset do |ma|
= ma.label :asset
= ma.file_field :asset
.buttonrow
= f.submit 'Save'
Result HTML (part):
<div class='field'></div>
<div class='buttonrow'>
<input name="commit" type="submit" value="Save" />
</div>
In above, div.field
is empty.
I stumbled across this from your rails issue, which appears to be not building the nested resource in your new
action.
Are you calling build_material_asset
in your controller? That could explain why the fields aren't getting rendered. If the nested object is nil
, there are no object to render fields for.
Try something like this:
class MaterialsController < ApplicationController
def new
@material = Traditions::Material.new
@material.build_material_asset
end
end
fields_for has new syntax.
= fields_for :plan, @plan do |builder| ...
in controller (action new) :
@plan = Parent.plans.new
read more here: http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-fields_for
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With