我在一个按章节显示教育目标的网站上工作。在一个章节中,目标必须以特殊矩阵显示,因此我想出了一个特殊模型(1 edu obj在disease_matrix中只有一行)。
class EducationalObjective < ApplicationRecord
belongs_to :chapter
belongs_to :disease_matrix
end
class DiseaseMatrix < ApplicationRecord
has_many :educational_objectives
end
class Chapter < ApplicationRecord
has_many :educational_objectives
end
ChaptersController
def show
@chapter = Chapter.find(params[:id])
@educational_objectives = @chapter.educational_objectives
end
end
目标按我的意愿显示,但在带有矩阵的页面上我不知道该怎么做:
<%= @chapter.title %>
<p><%= @chapter.description %></p>
<table>
<thead>
<tr>
<td>Objective</td>
<td>Matrix AA</td>
<td>Matrix BB</td>
...
<td>Matrix XX</td>
</tr>
</thead>
<tbody>
<% @educational_objectives.each do |e| %>
<tr>
<td><%= e.name %></td>
<td><%= e.disease_matrix.aa %>
<td><%= e.disease_matrix.bb %>
...
</tr>
<% end %>
</table>
schema.rb
create_table "disease_matrices", force: :cascade do |t|
t.integer "educational_objective_id"
t.integer "nklz_id"
t.string "kardio"
t.string "muscle"
t.string "hormone"
t.string "respi"
t.string "blut"
t.string "uro"
t.string "verdauung"
t.string "haut"
t.string "sinne"
t.string "nerven"
t.string "op"
t.string "therapeutika"
t.string "infektion"
t.string "notfall"
t.string "gesundheit"
t.string "dd"
t.string "hygiene"
t.string "compliance"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
错误是未定义的方法“aa”。由于我认为@educational_objectives通过模型连接到DiseaseMatrix,我只是在视图中添加了它们。但它不起作用。
我是否必须在Controller上工作并添加类似的内容
@disease_matrix = ?!?
或我该怎么做?
提前致谢!是的,我是铁杆的新手。
错误讯息: 未定义的方法`dd'代表nil:NilClass
答案 0 :(得分:0)
我相信你需要建立一个has_many:通过你的章节和疾病矩阵之间的关系。
所以而不是:
class DiseaseMatrix < ApplicationRecord
has_many :educational_objectives
end
你想要
class DiseaseMatrix < ApplicationRecord
has_many :educational_objectives
has_many :chapters, through: :educational_objectives
end
反过来章节。
您可以阅读所有相关内容here。
答案 1 :(得分:0)
感谢您的大力帮助和想法。 我的解决方案如下:
a)更多地考虑关联,我发现它是一个has_one/belongs_to
关联。
b).includes
的提示让我到了手册中的正确位置.join
。
经过一番摆弄后,我想出了这个,就像我一样:
class EducationalObjective < ApplicationRecord
belongs_to :chapter
has_one :disease_matrix
end
class DiseaseMatrix < ApplicationRecord
belongs_to :educational_objective
end
class Chapter < ApplicationRecord
#### no association to DiseaseMatrix necessary
end
ChaptersController
def show
@chapter = Chapter.find(params[:id])
@educational_objectives = @chapter.educational_objectives.joins(:disease_matrix)
end
end
<td><%= e.disease_matrix.kardio %></td>
现在显示这些内容,我希望它能够呈现。
再次感谢!
答案 2 :(得分:0)
感谢您的大力帮助和想法! 这是我的解决方案:
1st)考虑这些关联让我觉得它是一个has_one/belongs_to
关联
2).include
的提示将我带到了文档中的正确位置.joins
在摆弄了一下之后,现在我的最终代码显示了我想要的所有内容:
class EducationalObjective < ApplicationRecord
belongs_to :chapter
has_one :disease_matrix
end
class DiseaseMatrix < ApplicationRecord
belongs_to :educational_objective
end
class Chapter < ApplicationRecord
## no association to DiseaseMatrix needed
end
ChaptersController
def show
@chapter = Chapter.find(params[:id])
@educational_objectives = @chapter.educational_objectives.joins(:disease_matrix)
end
end
<td><%= e.disease_matrix.kardio %></td>
现在显示数据库的内容。
感谢所有人的帮助和时间!