我对rails非常陌生,并做了一些有趣的教程,但是一旦我走出他们整洁的墙壁,我就遇到了实现亲子关系的问题。
我有一个我正在构建的具有主题层次结构的rails应用程序 - <类别 - <水平。我暂时忽略等级,因为这个问题的答案适用于那里。
以下是主题和类别模型。
theme.rb:
class Theme < ActiveRecord::Base
has_many :categories
end
category.rb:
class Category < ActiveRecord::Base
belongs_to :theme
has_many :levels
end
我想在主题中显示类别表。我在路线中为主题添加了do块内的类别。
routes.rb中:
Rails.application.routes.draw do
resources :levels
resources :categories
resources :themes do
resources :categories
end
root "themes#index"
end
我已在主题的show.html.erb文件中添加<%= render :partial => @theme.categories %>
。部分文件呈现表格的一行,我希望名称显示为该类别的节目页面的链接。
_category.html.erb:
<%= div_for (category) do %>
<div class="category_wrapper clearfix">
<div class="pull-left">
<div class="category_name">
<%= link_to category.name, category, method: :show %>
</div>
<div class="category_question"><%= category.question %></div>
<div class="category_description"><%= category.description %></div>
</div>
</div>
<% end %>
不幸的是,当我点击主题的类别表中的链接时,我收到了上述错误 - No route matches [POST] "/themes/1"
。
如果我刷新浏览器,页面会使用完全相同的URL加载。我认为[POST]在这里是相关的,但是我不明白我需要在部分文件的链接或路由文件(或其他东西?)中进行更改才能解决!任何援助都将非常感激。
答案 0 :(得分:3)
根据 路线 ,您的link_to
应如下所示
<%= link_to category.name, theme_category_path(category, @theme) %>
确保@theme = Theme.find(params[:d])
themes_controller
方法
show
答案 1 :(得分:2)
我刚刚意识到。您可以看到代码中存在错误。
在_category.html.erb中,您有:
<%= link_to category.name, category, method: :show %>
这不是方法(方法定义了http方法,如get,post,put等)。你必须写行动:
<%= link_to category.name, category, action: :show %>
出于某种原因,Rails理解你不想要GET而是在那里发布。