获取未定义的方法erorr rails

时间:2018-10-07 13:10:02

标签: ruby-on-rails ruby activerecord

我要创建“活动用户”和“非活动用户”的列表。

我有用户模型和凭证模型(具有数量:整数)。

在我的路线上。rb

      resources :users do
        resources :vouchers
      end

  get 'active' => 'home#active', as: :active
  get 'unactive' => 'home#unactive', as: :unactive

在我的home_controller.rb

  def active
    @users = User.all
    @vouchers = Voucher.all
  end

  def unactive
    @users = User.all
    @vouchers = Voucher.all
  end

在active.html.erb

<% @users.each do |user| %>
    <% if user.vouchers.quantity >= 1 %>
        <%= user.name %> <br>
    <% end %>
<% end %>

在unactive.html.erb

<% @users.each do |user| %>
    <% if user.vouchers.quantity == 0 %>
        <%= user.name %> <br>
    <% end %>
<% end %>

但是我遇到了这个错误:“ 未定义方法'quantity'

如何获得此数量? 我想向用户显示在我的无效列表中有voucher.quantity == 0的用户。

谢谢!

2 个答案:

答案 0 :(得分:1)

user.vouchers是Vaucher对象的列表,对其调用quantity毫无意义,它是每个对象的属性,您希望它返回什么?

如果您不希望计算用户拥有多少张凭单,请使用count方法代替user.vouches.count

或者您可能想使用user.vouchers.first.quantity获取第一张凭证的数量。

或者您可能要检查所有凭证是否均具有数量0? user.vouchers.all?{|voucher| voucher.quantity == 0}

如果条件尚不清楚,您打算怎么做。

答案 1 :(得分:0)

我找到了解决方案。谢谢:)

  def active
    @users = User.joins(:vouchers).where('vouchers.quantity > 1').distinct
  end