has_many association引出“未定义的方法”

时间:2012-07-11 14:01:53

标签: ruby-on-rails associations has-many

Beeing是一个真正的新手,我正在用RoR构建一个非常简单的票证系统。

故障单可以在状态表中具有状态(例如“已确认”,ID为“1”),我想通过关联连接。我想在视图中显示状态。代码如下。但我一直得到一个未定义的方法错误。也许我以错误的方式设置了关联?

Ticket.rb:

class Ticket < ActiveRecord::Base
belongs_to :user
belongs_to :state

state.rb:

class State < ActiveRecord::Base
has_many :tickets

index.html.erb(基本上是脚手架):

<% @tickets.each do |ticket| %>

<tr>
<td><%= ticket.caller %></td>
<td><%= ticket.supervisor %></td>
<td><%= ticket.subject %></td>
<td><%= ticket.name %></td>
<td><%= ticket.email %></td>
<td><%= ticket.state.status %></td>
<td><%= link_to 'Anzeigen', ticket %></td>
<td><%= link_to 'Bearbeiten', edit_ticket_path(ticket) %></td>
<td><%= link_to 'Löschen', ticket, confirm: 'Sind Sie sicher?', method: :delete %></td>

tickets_controller.rb

@tickets = Ticket.search(params[:search]).paginate(:page => params[:page], :per_page => 20)

这是它创建的SQL-Query:

State Load (0.5ms)  SELECT "states".* FROM "states" WHERE "states"."id" = 1 LIMIT 1

这会出现以下错误:

undefined method `status' for nil:NilClass

有趣的是,它似乎在rails控制台中工作: 1.9.3-p194 :016 > @tickets.state State Load (0.5ms) SELECT "states".* FROM "states" WHERE "states"."id" = 2 LIMIT 1 => #<State id: 2, status: "confirmed", created_at: nil, updated_at: nil> 1.9.3-p194 :017 > @tickets.state.status => "confirmed"

3 个答案:

答案 0 :(得分:0)

您需要在数据库中添加引用,创建迁移:

class AddStateAndUserToTickets < ActiveRecord::Migration
  def up
    change_table :tickets do |t|
      t.references :state
      t.references :user
    end
  end
end

答案 1 :(得分:0)

尝试使用Rails的控制台查看每个故障单是否定义了State对象。它可能会返回nil,使status方法未定义。

答案 2 :(得分:0)

我说这是一个简单的数据问题......你的一张门票没有状态。对数据库执行查询以确认:

 SELECT COUNT(*) FROM tickets t 
 LEFT JOIN states s ON t.state_id = s.id
 WHERE s.id IS NULL