具有多对一关系的模型中"show"和"index"路线的问题 轨道上的红宝石



我觉得解决这个问题其实很简单,但我不能弄清楚。

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' %>

最新更新