Fields_for helper not working

I use nested attributes, but fields are not loading in my view. Does anyone know what I am 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' 

HTML result (part):

 <div class='field'></div> <div class='buttonrow'> <input name="commit" type="submit" value="Save" /> </div> 

In the above, div.field empty.

+6
source share
3 answers

I stumbled upon this from a rails issue , which does not seem to create a nested resource in your new action.

Are you calling build_material_asset in your controller? This may explain why the fields are not processed. If the nested object is nil , there is no object for the rendering fields.

Try something like this:

 class MaterialsController < ApplicationController def new @material = Traditions::Material.new @material.build_material_asset end end 
+10
source

fields_for has new syntax.

 = fields_for :plan, @plan do |builder| ... 

in the controller (new action):

 @plan = Parent.plans.new 

read more here: http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-fields_for

+3
source

I can’t check, but something like this?

 - 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' 

The problem is that you have nested = . You should use - for external iterations. Also, are you sure .field works? Shouldn't it be #field ?

0
source

Source: https://habr.com/ru/post/888739/


All Articles