为 #<Field 提供未定义的方法"each"



我有一个允许用户注册比赛的表单。在构建注册表单的过程中,我使用到目前为止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

最新更新