Ali
Ali

Reputation: 7493

Rails 3 - Fields_for Nested attributes not showing on form

OK this is weird, I have basically the following classes:

class PriceProfile < ActiveRecord::Base
  has_many :prices
  has_many :price_profile_date_ranges

  attr_accessible :name, :price_profile_date_ranges_attributes
  accepts_nested_attributes_for :price_profile_date_ranges

}

class PriceProfileDateRange < ActiveRecord::Base
  attr_accessible :end_date, :price_profile_id, :start_date, :prices, :prices_attributes
  has_many :prices, :dependent=>:destroy
  belongs_to :price_profile

  accepts_nested_attributes_for :prices
}

class Price < ActiveRecord::Base
  attr_accessible :price_profile_date_range_id, :price_profile_id, :product_id, :value
  belongs_to :price_profile
  belongs_to :price_profile_date_range
  belongs_to :product
}

A price profile defines a pricing scheme for a particular product whose price changes over time. The date ranges over which a price is applied is stored in the price_profile_date_range table and finally the prices table holds all the prices. I'm using the following controller & view to create the form here for setting prices while creating a date range. Basically the form has a start and end date fields and a grid i.e it would have a list of texteboxs against all products to enter the price.

This is the view:

.row
  .span9
    = simple_form_for(@price_profile_date_range, :class=>'well') do |f|


  .form-inputs
    = f.input :start_date, :required => true, :as => :string, :input_html =>{:class=>'datepicker'}
    = f.input :end_date, :required => true, :as => :string, :input_html =>{:class=>'datepicker'}
    = f.input :price_profile_id, :as=>:hidden
    %table.table.table-bordered.table-condensed.table-striped
      %tr
        %td
        - @products.each do |product|
          %td
            =product[:name]
          %td
            - f.fields_for(:prices) do |price_element|
              = price_element.input :value, :class=>'span1'
              = price_element.input :price_profile_id, :as=>:hidden
              = price_element.input :price_profile_date_range_id, :as=>:hidden
              = price_element.input :product_id, :as=>:hidden
  .form-actions
    = f.button :submit

This isnt exactly the final form - the problem is that the f.fields_for line doesn't seem to execute. In the controller I initialise the @price_profile_date_range object with a set of prices. If I do a raise inspect it shows all the price objects even in the view however the fields_for doesn't execute at all. I'm pretty stuck here real badly.

Upvotes: 2

Views: 2120

Answers (1)

Daniel Fischer
Daniel Fischer

Reputation: 3062

Try changing the - to a = - sounds silly but maybe that's the problem.

Upvotes: 3

Related Questions