2013-08-26 35 views
5

Im sử dụng đá quý simple_form và tôi cần phải làm một hình thức lồng nhau nhưng im gặp khó khăn ở đây là một số mã:ray lồng mô hình hình thức has_one hiệp hội

tôi có hai mô hình:

Apiphones:

class Apiphone < ActiveRecord::Base 
    attr_accessible :key, :phone 
    validates_presence_of :phone 
    belongs_to :store 
end 

Cửa hàng:

class Store < ActiveRecord::Base 
    has_one :apiphone 
    accepts_nested_attributes_for :apiphone 
end 

và theo quan điểm của tôi:

<%= simple_form_for [@group,@store] do |f| %> 
    <%= f.simple_fields_for :apiphone do |ph| %> 
     <%= ph.input :phone %> 
    <% end %> 
<% end %> 

nhưng không có gì hiển thị, bất kỳ ý tưởng nào?

Trả lời

20

sử dụng fields_for kết hợp với accepts_nested_attributes giả định rằng các hồ sơ được khởi tạo. Điều này có nghĩa là sử dụng các kiểu máy của bạn, @store.apiphone không được là nil khi biểu mẫu được tạo. Cách giải quyết vấn đề này là đảm bảo rằng apiphone được khởi tạo và liên kết với @store (cả hành động mới và chỉnh sửa).

def new 
    @store = Store.new 
    @store.build_apiphone 
end 
+0

cảm ơn! điều này cố định nó, người đàn ông của bạn :) –

+0

Cảm ơn rất nhiều! làm tôi bối rối trong một thời gian dài –

3

Tôi nghĩ rằng bạn quên xây dựng apiphone trong điều khiển của bạn, ví dụ:

def new 
... 
@store.build_apiphone 
... 
end 
+2

Tôi không chắc chắn về điều này nhưng '.build' được sử dụng cho' has_many'. vì đây là một 'has_one', bạn cần phải sử dụng' build_apiphone' – jvnill

+0

của bạn là đúng Tôi được cập nhật câu trả lời của tôi, cảm ơn;) – zolter