【问题标题】:Undefined method each Ruby每个 Ruby 的未定义方法
【发布时间】:2015-10-27 20:50:08
【问题描述】:

失败了。一个人可以有多个出价,这个特定的人只有一个出价。

在我的索引操作中,我有 @bids = Bid.find_by_person_id(params[:person_id])

在我看来是这样的

<% @bids.each do |bid| %>
   <%= bid.bid_amount %>
<% end %>

在访问人员出价的索引视图时,我收到了NoMethodError: undefined method each' for #&lt;Bid:0x007f988a346f00&gt;

这是因为这个人只有一个出价吗?我觉得不是这样,但除此之外我很茫然..

【问题讨论】:

  • 我知道它不是零。我调试验证。
  • 你不能遍历一条记录我的朋友

标签: ruby-on-rails ruby activerecord


【解决方案1】:

find_by 返回第一项。我想你正在寻找

Bid.where(person_id: params[:person_id])

【讨论】:

    【解决方案2】:

    Austio的答案是正确的。

    但是,为什么要直接调用Bid 模型呢?...

    一个人可以有多个出价

    您显然是从 person 模型构建数据,所以为什么不调用以下代码:

    @person = Person.find params[:person_id]
    @bids = @person.bids #-> bids belong to @person
    

    这将在不调用where 的情况下构建集合。

    当然,您的方法只使用单个数据库查询。但即便如此,上面的内容更加直观。

    --

    顺便说一句,您还需要在循环之前使用条件:

    <% if @bids.any? %>
       <% @bids.each.... %>
    <% end %>
    

    one 出价很好,但有 none 会导致循环吐出错误。以上解决了这个问题。

    【讨论】:

    • 这不是真的:“有一个出价很好,但没有一个会导致循环吐出错误。”对空集合调用 each 不会吐出错误。
    • 每当我在一个空集合上调用它时都会为我做。
    • 不,它没有。假设:@bids = Bid.where(:id =&gt; [non-existing-id]) 那么这不会引发任何错误:@bids.each{|bid| ... }.
    • 嗯,让我测试一下。
    • 您也可以尝试使用空数组。基本一样。
    猜你喜欢
    • 2013-03-07
    • 2013-04-28
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 2019-12-25
    • 2010-10-15
    • 1970-01-01
    • 2013-01-25
    相关资源
    最近更新 更多