我有一个允许用户注册比赛的表单。在构建注册表单的过程中,我使用到目前为止field_type为basic的动态嵌套字段。当我加载参与者新表单时,我试图从字段表中加载所有字段,field_type of basic。它会找到它们,如果我试着<%= @basic.name %>从新的形式,它将给出数据库中最后一个字段的名称与field_type,但如果我尝试:
<% @basic.each do |b| %>
<%= b.name %>
<% end
我得到错误未定义方法' each'为#<Field。>
这是来自participants_controller的新动作:
def new
@participant = @event.participants.new
@user = User.find(current_user.id)
@children = @user.children
@basic = Field.find_by(event_id: @event.id, field_type: 'basic')
end
字段属于事件,但我是否必须将它们连接到参与者以使此工作?
感谢find_by
只返回一条记录(如果条件不匹配,则返回nil
),使用where
返回一个集合。
@basic = Field.where(event_id: @event.id, field_type: 'basic')
但是,假设您在Event
中定义了关联has_many :fields
,您也可以使用:
@basic = @event.fields.where(field_type: 'basic')
如果您在Field
中定义了scope :basic, -> { where(field_type: 'basic') }
,则可以进一步简化为:
@basic = @event.fields.basic