2016-09-04 21 views
1

私はYouTubeで見つけたチュートリアルを使用してフォーラムのウェブサイトを作成するために、レール上でルビーを使用しています。私は80%を今まで問題なく使ってきました。私はシンタックスエラーやその他の事故を起こさないために、10回以上ビデオを見直しました。基本的に、投稿のコメントはデータベースに保存されていないので、私が提示したHTMLビューには表示されません。私は彼らがコメントのデータベースをターミナルでチェックしたので、彼らが保存していないことを知って、それは0カウントとして戻った。ここに私のコードは、別のファイルにあります...私のフォーラムのコメントがデータベースに保存されないのはなぜですか?

routes.rbを

Rails.application.routes.draw do 
    devise_for :users 

    resources :posts do 
     resources :comments 
    end 

    root 'posts#index' 
end 

create_comments

class CreateComments < ActiveRecord::Migration[5.0] 
    def change 
     create_table :comments do |t| 
      t.text :comment 
      t.references :post, foreign_key: true 
      t.references :user, foreign_key: true 

      t.timestamps 
     end 
    end 
end 

comments_controller.rb

class CommentsController < ApplicationController 

    def create 
     @post = Post.find(params[:post_id]) 
     @comment = @post.comments.create(params[:comment].permit(:comment)) 

     if @comment.save 
      redirect_to post_path(@post) 
     else 
      render 'new' 
     end 
    end 
end 

_form.html.hamlためのマイグレーションファイル

= simple_form_for([@post, @post.comments.build]) do |f| 
    = f.input :comment 
    = f.submit 

モデルファイルcomment.rbフォームの送信

class Comment < ApplicationRecord 
    belongs_to :post 
    belongs_to :user 
end 

LOG

Started POST "/posts/2/comments" for ::1 at 2016-09-04 23:00:46 +1000 
Processing by CommentsController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"/Un6QNWL4BIUbjH5VYMhLRatTq2hokcKnZ3Jb4WzTlvhuZ5AN3gFkA5VHN2E6zsm0iDIx/sKarEfID7Nx4WwwQ==", "comment"=>{"comment"=>"1"}, "commit"=>"Create Comment", "post_id"=>"2"} 
    Post Load (0.3ms) SELECT "posts".* FROM "posts" WHERE "posts"."id" = ? LIMIT ? [["id", 2], ["LIMIT", 1]] 
    (0.1ms) begin transaction 
    (0.1ms) rollback transaction 
Completed 500 Internal Server Error in 26ms (ActiveRecord: 0.5ms) 



ActionView::MissingTemplate (Missing template comments/new, application/new with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:raw, :erb, :html, :builder, :ruby, :coffee, :haml, :jbuilder]}. Searched in: 
    * "/Users/koz/Desktop/forum/app/views" 
    * "/Users/koz/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/devise-4.2.0/app/views" 
): 

app/controllers/comments_controller.rb:11:in `create' 
    Rendering /Users/koz/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_dispatch/middleware/templates/rescues/missing_template.html.erb within rescues/layout 
    Rendering /Users/koz/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_dispatch/middleware/templates/rescues/_source.html.erb 
    Rendered /Users/koz/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_dispatch/middleware/templates/rescues/_source.html.erb (14.6ms) 
    Rendering /Users/koz/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb 
    Rendered /Users/koz/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (5.4ms) 
    Rendering /Users/koz/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb 
    Rendered /Users/koz/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (2.9ms) 
    Rendered /Users/koz/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_dispatch/middleware/templates/rescues/missing_template.html.erb within rescues/layout (297.8ms) 
+0

コメントモデルファイルを追加できますか?それにはどのようなバリデーションがありますか? – ArtOfCode

+0

実際には2つの問題があります。1つはあなたのコメントが保存されていません.2つは、あなたの 'Comments#new'ビューが見つかりません。 2番目の問題を解決するには、 'render 'new'を' render:new'に変更してみることができますか? – ArtOfCode

+0

私はちょうど '新しい'と呼ばれるビューをまだ作成していません – koz

答えて

1

CommentモデルはUserbelongs_to団体は、デフォルトでは存在の検証が付属して必要なので、あなたのComment#create呼び出しが失敗しています)、あなたはそれを設定していません。

解決するには、ユーザーを設定します。

@comment = @post.comments.create(params[:comment].permit(:comment)) 
@comment.user = current_user 

(あなたが工夫を使用している場合、そうでない場合は、ユーザー別の方法を見つける。)

は、その後、あなたが(@comment.save)あったようにあなたのコードを続けます。

+0

美しい。魅力のように働いた。どうもありがとうございました。私はこのすべての初心者です:) – koz

+0

うれしいこと: –

+0

@koz答えの横にある緑色のチェックマークをクリックすると、答えが働いたことを示すことができます。 (答えが役に立つと思うなら、上向きの矢印をクリックしてupvoteすることもできます)。 – ArtOfCode

関連する問題