2017-11-14 12 views
0

私は最初のRoRアプリケーション - フォーラムを作成しています。私はフォーラムにコメントを追加しようとしていますが、いくつかのエラーが発生しています。私は同様の問題についてはグーグルではありますが、私の問題を解決するようなものはありません。ここに私のコードは次のとおりです。Ruby on rails - コメントを作成できません。 NoMethodError

コメントコントローラー:

class CommentsController < ApplicationController 
    def create 
    @forum = Forum.find(params[:forum_id]) 

    if [email protected]? 
     puts "Forum object is not nil" 
    end 

    @comment = @forum.comment.create(comment_params) 

    redirect_to forum_path 
    end 

    private 

    def comment_params 
    params.require(:comment).permit(:body) 
    end 
end 

フォーラムコントローラが自動生成され、私が変更されていないで、あなたはまだそれを見たい場合は(生成された使用して、レールを聞かせて、足場のフォーラムを生成します。私は以下

class Comment < ApplicationRecord 
    belongs_to :forum 
end 

class Forum < ApplicationRecord 
    has_many :comments 
    validates :title, presence: true, 
    length: {maximum: 50} 
    validates :body, presence: true 
end 

は、フォーラムのページ

ためshow.html.erb からのセクションのための形式です)知っています

そして、これは、レールからのエラーです:下記の抽出物を用いた

undefined method `comment' for #<Forum:0x444d518> 

:あなたのフォーラムモデルでhas_many :comments関連が欠落することができるように

end 
@comment = @forum.comment.create(comment_params) #highlighted 
redirect_to forum_path 
end 
+2

1)は3日のうちの方法ですRailsの。 2)あなたの投稿をフォーマットしてください。 – coreyward

+0

私はcorewardに同意します、もしこれが新しいアプリケーションならば、Rails 5を使うことをお勧めします。少し古いバージョンを望むなら、最新のRails 4を使います。あなたのモデルクラスが 'ApplicationRecord'あなたがRails 5を使っていると信じてください。 –

答えて

1

CommentsControllerのこの行に問題があります。@comment = @forum.comment.create(comment_params) @comment = @forum.comments.create(comment_params)である必要があります。 commentsは複数である必要があります。

あなたのコードは次のようになります。

class CommentsController < ApplicationController 
    def create 
    @forum = Forum.find(params[:forum_id]) 
    @comment = @forum.comments.create(comment_params) 
    redirect_to forum_path 
    end 

    private 

    def comment_params 
    params.require(:comment).permit(:body) 
    end 
end 
+0

私のコードをリファクタリングするためにこれを使用しました。 – User59

1

が見えます。見てみな。

また、has_manyアソシエーションが終了すると、「コメント」ではなく、どのForumオブジェクトでも「コメント」を呼び出すことができます。

あなたはこのようにそれを行うことができ、特定のフォーラムにコメントを作成する場合:あなたはForumモデルでcomments関連があることを確認してください

@comment = Comment.create(comment_params) #create a comment associated with this forum. 
+0

これはこれです。私がチェックした – User59

+0

あなたが示唆したことは、このエラーを示しています:引数の数が間違っています(0..1の2) – User59

+0

遅れて申し訳ありません、少し忙しかったです。編集したバージョンが動作しているかどうかを教えてください。基本的には、強力なcomment_paramsをcreateメソッドに渡すだけです。 – kparekh01

0

を:だから

class Forum < ApplicationRecord 
    has_many :comments 
end 
0

を、問題はCommentsControllerにあります。

私の代わりにこれを行うには、コメントコントローラを変更:

def create 
     @forum = Forum.find(params[:forum_id]) 

     @comment = Comment.new(comment_params) 
     @comment.forum_id = @forum.id 
     @comment.save! 

     redirect_to forum_path(@forum) 
    end 


    private 
     def comment_params 
      params.require(:comment).permit(:body) 
     end 

は、トリックを行うように見えました。

回答をいただきました皆様、ありがとうございます。

+0

これを行うより良い方法があります。私の答えをチェックしてください。 –

+0

代わりに '@comment = @ forum.comments.new(comment_params)'と '@ comment.save'を使用してください –

関連する問題