2013-08-18 2 views
2

Я продолжаю получать эту неопределенную ошибку, когда я пытаюсь отправить эту форму с вложенными атрибутами, не уверен, где она исходит от борьбы с ней в течение довольно долгого времени, я пытаюсь чтобы пользователи могли выбрать вариант в модели совета, представить свой выбор, я не уверен, правильно ли я подключил свои ассоциации или если ошибка возникает из формы. Есть noob для рельсов. Заранее спасибо.undefined method `[] = 'for nil: NilClass

ОшибкаОбновлено

Properties::BuildController#update 
app/controllers/properties/build_controller.rb, line 21 

Started PUT "/properties/5/build/council" for 127.0.0.1 at 2013-08-18 08:52:07 +0100 
Processing by Properties::BuildController#update as HTML 
    Parameters: {"utf8"=>"✓","authenticity_token"=>"wBWQaxtBioqzGLkhUrstqS+cFD/xvEutXnJ0jWNtSa0=", "council_id"=>"1", "commit"=>"Save changes", "property_id"=>"5", "id"=>"council"} 
    Property Load (0.2ms) SELECT "properties".* FROM "properties" WHERE "properties"."id" = ? LIMIT 1 [["id", "5"]] 
Completed 500 Internal Server Error in 35ms 

NoMethodError - undefined method `[]=' for nil:NilClass: 

Совета Вид

<h1>Select Council</h1> 


<%= form_tag url_for(:action => 'update', :controller => 'properties/build'), :method => 'put' do %> 

<%= select_tag :council_id, options_from_collection_for_select(Council.all, :id, :name) %> 

    <%= submit_tag %> 
<% end %> 

Контроллер

class Properties::BuildController < ApplicationController 
    include Wicked::Wizard 

    steps :tenant, :meter, :council, :confirmed 

    def show 
    @property = Property.find(params[:property_id]) 
    @tenants = @property.tenants.new(params[:tenant_id]) 
    @meter = @property.build_meter 
    @council = @property.build_council 
    render_wizard 
    end 

    def edit 
    @property = Property.find(params[:property_id]) 
    end 


    def update 
    @property = Property.find(params[:property_id]) 
    params[:property][:status] = step.to_s 
    params[:property][:status] = 'active' if step == steps.last 
    @property.update_attributes(params[:property]) 
    render_wizard @property 
    end 

end 

Council.rb

class Council < ActiveRecord::Base 
    attr_accessible :CouncilEmail, :name, :CouncilTel 

    belongs_to :property 
end 

ОБНОВЛЕНО Propery.rb

class Property < ActiveRecord::Base 
    attr_accessible :name, :address_attributes, :tenants_attributes, :meter_attributes, :council_attributes, :property_id, :status 
    belongs_to :user 


    has_one :address, :as => :addressable 
    accepts_nested_attributes_for :address, :allow_destroy => true 


    has_one :council 
    accepts_nested_attributes_for :council, :allow_destroy => true 

    has_many :tenants, :inverse_of => :property 
    accepts_nested_attributes_for :tenants, :allow_destroy => true, :reject_if  => :all_blank 

    has_one :meter 
    accepts_nested_attributes_for :meter, :allow_destroy => true 


    validates :name,  :presence => :true 
    validates :address, :presence => :true 
    validates :tenants, :presence => true, :if => :active_or_tenants? 
    validates :council, :presence => true, :if => :active_or_council? 


    def active? 
    status == 'active' 
    end 

    def active_or_tenants? 
    (status || '').include?('tenants') || active? 
    end 

    def active_or_council? 
    (status || '').include?('council') || active? 
    end 
end 
+1

Ошибка обратного хода была бы полезна. –

ответ

5

Я думаю, что это

params[:property] 

является nil. Так Рубин жалуется, делая

params[:property][:status] = 'foo' 

Вы можете захотеть сделать что-то вроде этого:

if params[:property] 
    params[:property][:status] = 'foo' 
end 

Однако в вашем случае проблема в том, что вы используете form_tag вместо form_for, для этого params[:property] не определены.

+0

Правильно, pierre-louis, попытался сделать это изменение, пришел с той же ошибкой, как вы думаете, его необходимо, чтобы я включил статус в форму, я использую статус для частичной проверки многоэтапной формы, следующей этому учебнику [ link] (http://goo.gl/mKDxey) – cyclopse87

+0

Из вашего учебника переменная 'status' исходит из модели. В вашем случае вам нужно будет включить его в форму или в модель, как это предлагает учебник;) –

+0

Включили статус переменной в модель, как в учебнике, я все равно получаю ту же ошибку. обновил модель собственности в моем вопросе. – cyclopse87

0

Лучший подход для проверки вложенных атрибутов в рубиновых хэшей в настоящее время является использование

Пример:

params.dig(:property, :status) 

Если ключ не определен ноль возвращается.