2012-02-27 28 views
5

Tôi đang gặp sự cố khi tạo biểu mẫu mô hình lồng nhau.Nhận các trường để làm việc với mối quan hệ has_many

Dưới đây là mô hình của tôi:

class Workout < ActiveRecord::Base 
    has_many :scores 
    has_many :users, :through => :scores 
    accepts_nested_attributes_for :scores 
end 

class Score < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :workout 
end 

class User < ActiveRecord::Base 
    has_many :scores 
    has_many :workout, :through => :scores 
end 

Trong bộ điều khiển Workout, đây là những gì tôi có cho hành động mới:

def new 
    @workout = Workout.new 
    3.times { @workout.scores.build } 

    respond_to do |format| 
     format.html # new.html.erb 
     format.json { render json: @wod } 
    end 
end 

Tuy nhiên, trong các hình thức, khi tôi cố gắng fields_for, tôi don 't get anything:

<% f.fields_for :scores do |builder| %> 
    <p> 
     <%= builder.label :score %><br /> 
     <%= builder.text_field :score %> 
    </p> 
<% end %> 

Tôi đang làm gì sai?

+0

'Wod' là gì và tại sao bạn tạo điều đó trong bộ điều khiển Workouts của mình? –

+0

Đó là lỗi đánh máy. Đã sửa! – Huey

Trả lời

6

Nó chỉ ra trong Rails 3, tôi cần sử dụng <% = fields_for ...%> thay vì <% fields_for ...%>.

0

Hãy thử thêm dòng sau vào mô hình Workout của bạn:

attr_accessible :scores_attributes 

accepts_nested_attributes_for :scores 

Nếu bạn muốn chắc chắn rằng một số điểm không được xây dựng trừ khi là nó có giá trị, và đó là có thể bị phá hủy thông qua các mối quan hệ bạn có thể mở rộng ra:

attr_accessible :scores_attributes 

accepts_nested_attributes_for :scores, reject_if: proc { |a| a[:field].blank? }, allow_destroy: true 
validates_associated :scores 

Chỉ cần chuyển :field với một lĩnh vực có liên quan là cần thiết cho một số điểm được tạo ra.

+0

Ngớ ngẩn cho tôi, sự cố đã sử dụng <% fields_for ...%> thay vì <% = – Huey

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