2012-02-27 8 views
0

コメントシステムを作成しましたが、これをマイクロポストの下に投稿しようとしていますが、このルーティングエラーが発生します。助言がありますか?すべての助けが大変ありがとう!レール:ルーティングエラー、コメントモデルからマイクロポストモデルへ

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

上記のフォームを表示しているアクションの内容を投稿してください。 – deefour

+0

@Deefour Sure Posted – Kellogs

+0

私は、コントローラから 'new'メソッドまたは同等のものを探しています。 '@micropost'が設定されているところです。 – deefour

答えて

1

あなたがエラーを取得している理由は、あなたがデータベースにまだ存在しないmicropostcommentsためのフォームを構築しようとしているということです。

フォーム、そこにある -

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

とがUserControllerに、あなたは持っている -

@micropost = Micropost.new 

コメントはmicropostのサブリソースなので、コメントを作成したURLは次のようになります。 /micropost/:id/commentsここで、idはmicropostのIDです。これは、マイクロポストを保存した後にのみ可能です。

あなたの行動は@micropostを既存の投稿に割り当てるか、フォームを動作させるためにそこに作成する必要があります。何かのような -

@micropost = Micropost.last || Micropost.create 

少なくともエラーを取り除くでしょう。

+0

これは、 '@micropost = Micropost.new'これがユーザーコントローラに入力されますか? – Kellogs

+0

はい。実際にあなたが投稿したフォームコードをレンダリングするコントローラーアクション。 – abhishek

+0

は、はい、私は今 は 'CommentsController#でのActiveRecord :: StatementInvalidが SQLite3の::のSQLExceptionを作成micropostを示しており、コメントはそこにもあることを想定しているが、私は今、このエラーで迎えていたユーザコントローラにこれを追加しましたID: "マイクロポスト"、 "ID" FROM "マイクロポスト" WHERE "マイクロポスト"、 "マイクロポスト"、 "マイクロポスト" "id" = 1 ORDER BY microposts.created_at DESC) ' ' app/controllers/comments_controller.rb:6: 'create'' – Kellogs

0

私は(マルク・タルボットが指摘したように、以来、私の他の回答を削除して正しい応答はなかったもう一度これをみますあなたの問題に)

おそらく、:microposts:micropostとすると簡単です。(モデルの名前を反映)です。

resources :micropost do 
    resources :comments 
end 
+0

同じエラーが発生しました:/ – Kellogs

関連する問題