Ruby on Rails - 父和子之间的链接 - 没有路由匹配[POST]

时间:2015-08-06 12:25:40

标签: ruby-on-rails ruby ruby-on-rails-4

我对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]在这里是相关的,但是我不明白我需要在部分文件的链接或路由文件(或其他东西?)中进行更改才能解决!任何援助都将非常感激。

2 个答案:

答案 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而是在那里发布。