Rails:路由错误,注释模型到微博模型

时间:2012-02-27 04:27:43

标签: ruby-on-rails ruby ruby-on-rails-3 post routing

我制作了一个评论系统,我试图让它在微博下发布,但我不断得到这个路由错误。有什么建议?非常感谢所有帮助!

Routing Error

No route matches [POST] "/microposts/comments"

表格

<div class="CommentField">
<%= form_for ([@micropost, @micropost.comments.new]) do |f| %>
<%= f.text_area :content, :class => "CommentText", :placeholder => "Write a Comment..." %>
<div class="CommentButtonContainer">
<%= f.submit "Comment", :class => "CommentButton b1" %>
</div>
<% end %>
</div>

评论控制器

class CommentsController < ApplicationController 
  def create
    @micropost = Micropost.find(params[:micropost_id])
    @comment = @micropost.comments.build(params[:comment])
    @comment.user_id = current_user.id
    @comment.save 
      respond_to do |format|
      format.html 
      format.js
    end
  end

end

路由

resources :microposts do
  resources :comments
end

Micropost模型

class Micropost < ActiveRecord::Base
  attr_accessible :title, :content, :view_count
  acts_as_voteable
  belongs_to :user
  has_many :comments
  has_many :views
  accepts_nested_attributes_for :comments
end

用户控制器

class UsersController < ApplicationController
  def show
    @user = User.find(params[:id])
    @school = School.find(params[:id])
    @micropost = Micropost.new
    @comment = Comment.new
    @comment = @micropost.comments.build(params[:comment])
    @microposts = @user.microposts.paginate(:per_page => 10, :page => params[:page])
  end
end

2 个答案:

答案 0 :(得分:1)

您收到错误的原因是您正在尝试为数据库中尚不存在的comments micropost构建表单。

表格,有一个 -

   form_for ([@micropost, @micropost.comments.new]) do |f|

在UsersController中你有 -

  @micropost = Micropost.new

评论是微博的子资源,因此创建评论的网址应该看起来像/micropost/:id/comments其中:id是微博的ID。只有在保存微博之后才有可能。

因此,我认为您的操作应该将@micropost分配给现有帖子,或者在那里创建一个以使表单正常工作。像 -

这样的东西
   @micropost = Micropost.last || Micropost.create

至少可以摆脱错误。

答案 1 :(得分:0)

我会再次尝试(删除我的其他答案,因为Marc Talbot指出,这不是对你的问题的正确答案)

也许问题就像让:microposts成为:micropost而不是(以反映您的模型名称)一样简单。

resources :micropost do
  resources :comments
end