我有三个模型:项目,其中包含阶段,其中包含内容。
在项目show.html.erb上,我想显示与该项目关联的所有阶段,然后显示与这些阶段关联的内容。
所以这是我在 show.html.erb :
中尝试的内容<% @stages.each do |stage| %>
<section name="concept" class="stage">
<h3><%= stage.name %></h3>
<% @contents.each do |content| %>
<p><%= content.name %></p>
<% end %>
</section>
<% end %>
这就是我的 projects_controller.rb
中的内容def show
project = Project.friendly.find(params[:id])
@stages = project.stages
stage = Stage.friendly.find(params[:id])
@contents = stage.contents
end
这是 stage.rb 模型:
class Stage < ActiveRecord::Base
extend FriendlyId
friendly_id :name, use: :slugged
belongs_to :project
has_many :contents
end
这是 contents.rb :
class Content < ActiveRecord::Base
belongs_to :stage
end
我得到的错误是:
SQLite3 :: SQLException:没有这样的列:stages.slug:SELECT“阶段”。* FROM“阶段”WHERE“阶段”。“slug”='脉冲'ORDER BY“阶段”。“id”ASC LIMIT 1
提取的来源(第16行):
stage = Stage.friendly.find(params[:id])
编辑:问题是它正在寻找具有项目ID的舞台,而不是舞台的ID。我正试图让它显示的舞台然后迭代它所属的每个内容。
答案 0 :(得分:2)
项目管理员:
def show
@project = Project.friendly.find(params[:id])
@stages = @project.stages.includes(:contents)
end
查看:
<% @stages.each do |stage| %>
<section name="concept" class="stage">
<h3><%= stage.name %></h3>
<% stage.contents.each do |content| %>
<p><%= content.name %></p>
<% end %>
</section>
<% end %>
答案 1 :(得分:0)
根据friendly_id docs,您必须运行迁移,将slug
列添加到舞台模型中。确保您已完成此操作并运行rake db:migrate
。
这就是错误所说的:
SQLite3 :: SQLException:没有这样的列:stages.slug
您还没有将该列添加到阶段表中。
你必须给它舞台的id。在您的代码中,您在两个查找中使用相同的ID:
project = Project.friendly.find(params[:id])
@stages = project.stages
stage = Stage.friendly.find(params[:id])
您使用params[:id]
两次。必须有一些其他可以使用的参数,假设您设置嵌套路由,可能params[:stage_id]
。通常情况下,父模型将具有params[:project_id]
,而params[:id]
将是嵌套阶段模型的ID。