这里是 Ruby 的新手,尝试建立经典的用户文章 MVC 结构,但改用目标和关键结果。
问题:
NoMethodError in Home#index - undefined method `keyresults' for nil:NilClass
问题:
如何在 Controller 中定义目标和关键结果之间的关系?
我想这就是问题所在。
任何关于如何进行的解释都会很棒!
我试过:
@objectives = Objective.all.include(:keyresult)
但这没有用。
目标:在索引页上列出所有目标及其相关的关键结果:
Objective 1
- Key Result 1
- Key Result 3
Objective 2
- Key Result 2
- Key Result 4
- Key Result 5
目标.rb
class Objective < ApplicationRecord
has_many :objectives_keyresults, dependent: :destroy
has_many :keyresults, through: :objectives_keyresults
keyresult.rb
class Keyresult < ApplicationRecord
belongs_to :objective
home_controller.rb
class HomeController < ApplicationController
def index
@objectives = Objective.all
end
index.html.erb
<%- model_class = Objective -%>
<% @objectives.each do |objective| %>
Objective:
<%= objective.title %>
Key Result:
<% @objective.keyresults.each do |keyresult| %>
<%= keyresult.title %>
<% end %>
<% end %>
schema.rb
create_table "keyresults", force: :cascade do |t|
t.string "title"
t.integer "objective_id"
t.index ["objective_id"], name: "index_keyresults_on_objective_id"
end
create_table "objectives", force: :cascade do |t|
t.string "title"
end
create_table "objectives_keyresults", force: :cascade do |t|
t.integer "objective_id"
t.integer "keyresult_id"
t.index ["keyresult_id"], name: "index_objectives_keyresults_on_keyresult_id"
t.index ["objective_id"], name: "index_objectives_keyresults_on_objective_id"
end
感谢您的帮助!
最佳答案
在您的 block each
中,您使用了@objective
。它是 nil
使用目标
。
<% @objectives.each do |objective| %>
Objective:
<%= objective.title %>
Key Result:
<% objective.keyresults.each do |keyresult| %>
<%= keyresult.title %>
<% end %>
<% end %>
关于ruby-on-rails - 针对所有用户和所有文章的未定义方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54841536/