在帖子资源中嵌套评论资源

时间:2013-12-02 17:14:58

标签: ruby-on-rails-4 actioncontroller nested-routes

我正在rubyonrails.org上做RoR教程,并且在向帖子添加评论之前一直很好。

当我点击进入'显示'一篇文章,我收到以下错误:

帖子#show中的 ActionController :: UrlGenerationError 没有路由匹配{:action =>" index",:controller =>" comments",:id =>" 1",:format =&gt ; nil}缺少必需的键:[:post_id]

我有一个关于posts_controller.rb的show方法(见下文),除非在rails指南上有一个错字(可能,因为其他地方还有其他的),我认为还有一些东西继续我的routes.rb。

它表示错误发生在/show.html.erb的第25行附近。

        的标题         <%= @ post.title%>     

<p>
  <strong>Text:</strong>
  <%= @post.text %>
</p>

<h2>Comments</h2>
<% @post.comments.each do |comment| %>
    <p>
      <strong>Commenter:</strong>
      <%= comment.commenter %>
    </p>

    <p>
      <strong>Comment:</strong>
      <%= comment.body %>
    </p>
<% end %>

<h2>Add a comment:</h2>
<%= form_for([:post, @post.comments.build]) do |f| %>
    <p>
      <%= f.label :commenter %><br />
      <%= f.text_field :commenter %>
    </p>
    <p>
      <%= f.label :body %><br />
      <%= f.text_area :body %>
    </p>
    <p>
      <%= f.submit %>
    </p>
<% end %>

<%= link_to 'Back', posts_path %>
<%= link_to 'Edit', edit_post_path(@post) %>

/posts_controller.rb

class PostsController < ApplicationController

  def new
    @post = Post.new
  end

  def index
    @post = Post.all
  end

  def show
    @post = Post.find(params[:id])
  end

  def create
    @post = Post.new(params[:post].permit(:title, :text))

    if @post.save

      redirect_to @post

    else
      render 'new' 
    end

    def edit
      @post = Post.find(params[:id])
    end
  end

  def update
    @post = Post.find(params[:id])

    if @post.update(params[:post].permit(:title, :text))
      redirect_to @post
    else 
      render 'edit'
    end
  end

  def destroy
    @post = Post.find(params[:id])
    @post.destroy

    redirect_to posts_path
  end

  private
    def post_params
      params.require(:post).permit(:title, :text)
    end

end

的routes.rb

Myapp::Application.routes.draw do

  resources :posts do  
    resources :comments
  end

  root "welcome#index"
end

我认为错误与我的routes.rb文件有关,但我无法弄明白究竟是什么。我是否错误地将我的路线嵌套到评论中?

0 个答案:

没有答案