RuntimeError RoR ...为nil调用id,这将是错误的

时间:2014-03-15 17:50:42

标签: ruby-on-rails ruby activerecord

在我的商家索引页面上,我试图显示当前登录用户对每个特定商家的信用额度。请注意,在列表中可能存在用户没有信用的商家。

商家#index

中的RuntimeError

显示...... / app / views / merchants / index.html.erb第9行:

调用id为nil,错误地为4 - 如果你真的想要id为nil,请使用object_id

<ul class="list-group">     
    <% @merchants.each do |merchant| %>
      <a href="/merchants/<%= merchant.id %>" class="list-group-item "><%= merchant.name %>   
        <% if Credit.where(:user_id => @current_user.id, :merchant_id => merchant.id).count > 0 %>
   line9->  <%= Credit.where(:user_id => @current_user.id, :merchant_id => merchant.id).sum(:amount) %>
        <% end %> 
      </a>
     <% end %>
</ul>

提前致谢。

1 个答案:

答案 0 :(得分:0)

不要在视图中放置纯SQL - 这就是控制器的用途

你应该这样做:

#app/models/credit.rb
class Credit < ActiveRecord::Base
    scope :active, -> { where("amount IS NOT NULL") }
end

#app/controllers/credits_controller.rb
def index
    @credits = current_user.credits.active #-> only shows active credits
end

#app/views/credits/index.html.erb
<ul class="list-group">     
<% @merchants.each do |merchant| %>
  <a href="/merchants/<%= merchant.id %>" class="list-group-item "><%= merchant.name %>   
    <%= @credits.sum(:amount) if @credits.present? %>
  </a>
 <% end %>