我觉得解决这个问题其实很简单,但我不能弄清楚。
https://github.com/kingdavidek/StuddyBuddy我正在写一个应用程序来帮助我总结非小说类书籍。我想对书(或片)有一个视图,然后与章节/节建立一对多的关系,其中每个章节都有自己的视图。我还希望能够使子节与多对一关系的部分等。
这将是一种树形结构,其中每个较小的部分都有自己的摘要。(我基本上遵循jumpstart实验室博客项目,但调整它为我自己的使用。http://tutorials.jumpstartlab.com/projects/blogger.html#blogger-2)
我已经能够成功地为这篇文章创建视图并链接到各个部分。我谈到了jumpstart教程中的评论部分,其中评论与文章有多对一的关系,并且评论显示在父文章下。我想使用相同的节/章的概念,除了我想链接到每个单独的节,并在一个新的视图中显示自己。
section模型的路由如下:
piece_section GET /pieces/:piece_id/sections/:id(.:format) sections#show
piece_sections GET /pieces/:piece_id/sections(.:format) sections#index
我在新页面中显示单个部分时遇到麻烦。
我的第一个问题是我不能直接链接到单个部分的显示操作,我不知道为什么:
show.html.erb中父类"Piece"或book的相关部分:
<% @pieces.sections.each do |section| %>
<li>
<%= link_to section.name, piece_section_path(section), class: 'section_name' %>
<!-- this middle part 'piece.name' is the psart we want the link to say, the next part is our route helper.-->
</li>
<% end %>
<%= link_to "delete", piece_path(@pieces), method: :delete, data: {confirm: "Really delete the article?"}
%>
父控制器"Piece":
def show
@pieces = Piece.find(params[:id])
end
当我尝试这样做时,我得到以下错误:
ActionController::UrlGenerationError in Pieces#show
Showing /home/david/Documents/Learning/StuddyBuddy/app/views/pieces/show.html.erb where line #9 raised:
No route matches {:action=>"show", :controller=>"sections", :id=>nil, :piece_id=>#<Section id: 1, name: "xama", broader_context: "hahahah", summary: nil, key_questions_addressed: nil, thoughts: nil, piece_id: 1, created_at: "2016-07-28 10:46:05", updated_at: "2016-07-28 10:46:05">} missing required keys: [:id]
<%= link_to section.name, piece_section_path(section), class: 'section_name' %>
当我链接到section模型的索引操作时,它可以工作,并且我看到父"Piece"的"show"操作完全正常。
我的第二个问题是当我在视图的作品。我试着点击一个单独的部分(如。此链接:
<%= link_to section.name, piece_sections_path(section), class: 'section_name' %>
)
由于某些原因,我无法显示section模型的section和列。
这是section控制器:
class SectionsController < ApplicationController
def index
@pieces = Piece.find(params[:piece_id])
@sections = @pieces.sections.find(params[:section_id])
end
def show
@sections = Section.all
#@sections = Piece.sections.find(params[:id])
#@sections = @piece.sections.all
#@sections.piece_id = @pieces.id
end
end
下面是Section模型的index.html.erb文件:
<h1> Yoyo</h1>
<p>Piece: <%= @pieces.name%></p>
<p> Section: <%= @sections.name%></p>
<p> Broader Context: <%= @sections.broader_context %></p>
这是路线。rb文件:
Rails.application.routes.draw do
root to: 'articles#index'
resources :pieces do
resources :sections
end
end
我得到的问题是:
ActiveRecord::RecordNotFound in SectionsController#index
Couldn't find Section without an ID
Request
Parameters:
{"piece_id"=>"1"}
我不明白这里是如何我没有访问节id??我怎么只能访问piece_id??
我真的很感激你的帮助,因为我已经被困在这个问题上一段时间了。传递piece id作为piece_section_path
链接到helper需要两个参数
piece_section GET /pieces/:piece_id/sections/:id(.:format) sections#show
-
:piece_id
:id
( section_id
)将你的链接改为:
<%= link_to section.name, piece_section_path(@pieces, section), class: 'section_name' %>