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"
答案 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