2010-12-12 29 views
18

Đã googling điều này một lúc và không có may mắn. Tôi nhận được lỗi" NoMethodError (phương thức undefined `with_indifferent_access'" trên web của tôi . dịch vụ khi đi qua nó thuộc tính lồng nhau"NoMethodError (phương thức không xác định` with_indifferent_access 'cho ... "khi chuyển các thuộc tính lồng nhau

những lồng khác làm việc, họ là one-to-one tuy nhiên và điều này là một-nhiều ...

class Customer < ActiveRecord::Base 

    belongs_to :quote 

    has_one :policy, :dependent => :destroy 
    has_one :vehicle, :dependent => :destroy 
    has_many :claims, :dependent => :destroy 
    has_many :incidents, :dependent => :destroy 

    accepts_nested_attributes_for :policy 
    accepts_nested_attributes_for :vehicle 
    accepts_nested_attributes_for :incidents 
end 

làm việc một cách chính xác:

Processing QuotesController#create to xml (for 127.0.0.1 at 2010-12-12 15:16:33) [POST] 
    Parameters: {"quote"=>{"customer_attributes"=>{"address1"=>nil, "city"=>"ggh", "dob"=>nil, "address2"=>nil, "title"=>nil, "country"=>nil, "postcode"=>nil, "vehicle_attributes"=>{"mileage"=>nil, "registration"=>nil, "value"=>nil, "parking"=>nil}, "policy_attributes"=>{"breakdown"=>nil, "windscreen"=>"1", "excess"=>nil}, "telephone"=>nil, "surname"=>nil, "forename"=>"wasdddfggh", "email"=>nil}}} 
    [4;35;1mQuote Create (1.0ms)[0m [0mINSERT INTO "quotes" ("created_at", "updated_at") VALUES('2010-12-12 15:16:33', '2010-12-12 15:16:33')[0m 
    [4;36;1mCustomer Create (0.0ms)[0m [0;1mINSERT INTO "customers" ("address1", "city", "dob", "address2", "quote_id", "created_at", "title", "country", "postcode", "updated_at", "telephone", "forename", "surname", "email") VALUES(NULL, 'ggh', NULL, NULL, 2, '2010-12-12 15:16:33', NULL, NULL, NULL, '2010-12-12 15:16:33', NULL, 'wasdddfggh', NULL, NULL)[0m 
    [4;35;1mPolicy Create (0.0ms)[0m [0mINSERT INTO "policies" ("breakdown", "created_at", "windscreen", "excess", "updated_at", "customer_id") VALUES(NULL, '2010-12-12 15:16:33', 1, NULL, '2010-12-12 15:16:33', 2)[0m 
    [4;36;1mVehicle Create (0.0ms)[0m [0;1mINSERT INTO "vehicles" ("mileage", "created_at", "updated_at", "registration", "value", "parking", "customer_id") VALUES(NULL, '2010-12-12 15:16:33', '2010-12-12 15:16:33', NULL, NULL, NULL, 2)[0m 
Completed in 153ms (View: 4, DB: 1) | 201 Created [http://localhost/quotes.xml] 
host/quotes.xml] 

Tuy nhiên, khi thêm

"incidents_attributes"=>{"date_of_incident"=>"2008-05-19", "sum_of_claim"=>"34554", "description"=>"PLEASE!"}, 

nó gây ra

NoMethodError (undefined method `with_indifferent_access' for "2008-05-19":String): 

Loại bỏ các date_of_incident và nó sẽ chỉ phàn nàn như vậy về các thuộc tính tiếp theo.

Trước đây tôi đã có "sự cố_attributes" (sự cố số ít) và has_many: sự cố, nhưng thay đổi điều này không giúp ích gì.

+0

Tôi đang gặp vấn đề tương tự. Nhưng nó làm việc tốt cho tôi cho hiệp hội has_many. Nhưng đưa ra lỗi tương tự cho liên kết has_one. Bạn có thể vui lòng cho biết cách truy cập vào liên kết has_one không? – Ashi

Trả lời

17

vì khách hàng có nhiều sự cố, Rails hy vọng "events_attributes" là một mảng chứ không phải băm. Điều này nên tự động xảy ra, khi bạn làm:

<%= form_for @customer do |f| %> 
    <%= f.fields_for :incidents do |incident_fields| %> 
    <%= incident_fields.date_select :date_of_incident %> 
    <% end %> 
<% end %> 
+1

Vì biểu mẫu nằm trong một dự án khác, (Sử dụng tài nguyên hoạt động) Tôi không thể nhận được <% customer_f.fields_for: incedents do | event_f | %> để làm việc. Vì vậy, thay vì: sự cố tôi đã được viết bằng tay "events_attributes" –

+0

+1 Tôi đã có một vấn đề mà tôi đã phải chèn một đối tượng băm vào một mối quan hệ một-nhiều đã làm: '... [: addresses_attributes] = params [: address] 'và thay vào đó nó hoạt động:' ... [: addresses_attributes] = {"0" => params [: address]} ' – DJTripleThreat

Các vấn đề liên quan