![](/img/trans.png)
[英]Active Admin: belongs_to giving “undefined method” Error in Rails 4
[英]Rails: Is the NoMethodError undefined error linked to belongs_to?
我的模型如下:
class Project < ApplicationRecord
belongs_to :workspace
has_many :tasks, dependent: :destroy
end
class Task < ApplicationRecord
belongs_to :person
belongs_to :project
end
class Person < ApplicationRecord
belongs_to :company
has_many :tasks
end
如您所見,每個任務都屬於一個項目。 除此之外,每個任務都有一個附加的人員(負責該任務的人員)。 在我的任務模型中,我有一個project_id和一個person_id。
在我的Tasks#Index視圖中,我收到一個NoMethodError。 在索引視圖中,這是導致錯誤的原因:
<% @task.each do |t| %>
<tr>
<td><%= t.person.id %></td>
確切的錯誤是“ nil:NilClass的未定義方法'id'”。
我的聯系不正確嗎?
您的數據庫中有一個未鏈接到某人的任務。 這意味着您的數據庫當前:
tasks.person_id
為null
。 tasks.person_id
上沒有對people
表的foreign_key 有關外部鍵的信息,請參見Rails遷移指南。
解:
Task.includes(:person).all.select { |t| t.person.nil? }
Task.includes(:person).all.select { |t| t.person.nil? }
Task.includes(:person).all.select { |t| t.person.nil? }
,刪除這些任務或為他們分配一個現有人員 person_id
是外鍵並且不能為空。 (如果您有很多任務,則可以用LEFT JOIN
SQL查詢代替第一點,我認為情況並非如此)。
在我看來,關聯正確。 如果不是,則您的錯誤消息將抱怨沒有名為person
方法的task
。
相反,該消息告訴您t.person
實際上為nil
。 我假設@task
實際上是一些任務集合; 其中至少有一個似乎想念一個人。
如果您認為每個任務都一定要有一個人,那么可以使用Rails控制台或數據庫的GUI查看我的數據。 另外,使用安全訪問運算符t&.person&.id
可以避免此錯誤,並向您顯示發生了什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.