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