【问题标题】:rails undefined method `each' for #<Fieldrails undefined method `each' for #<Field
【发布时间】:2021-01-27 10:29:43
【问题描述】:

我有一个允许用户注册锦标赛的表格。在构建注册表单的过程中,到目前为止,我使用基本的 field_type 动态嵌套字段。当我加载参与者新表单时,我试图从 Fields 表中加载所有 field_type 为基本的字段。它会找到它们,如果我只是从新表单中尝试 它将给出数据库中具有该 field_type 的最后一个字段的名称,但如果我尝试:

<% @basic.each do |b| %>
  <%= b.name %>
<% end 

# 收到错误未定义方法“每个”

这是来自参与者控制器的新操作:

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

字段属于事件,但我是否必须将它们连接到参与者才能完成这项工作?

谢谢

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    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, -&gt; { where(field_type: 'basic') },您可以进一步简化为:

    @basic = @event.fields.basic
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-31
      • 1970-01-01
      • 2015-01-29
      • 1970-01-01
      • 1970-01-01
      • 2011-09-05
      • 1970-01-01
      相关资源
      最近更新 更多