質問編集履歴

1 articles/show.html.erbとartcles_controllerを追記しました。

退会済みユーザー

退会済みユーザー

2017/05/08 15:58  投稿

【Ruby on Rails】ブログサイトでコメント機能の関連付けができません。
###前提・実現したいこと
Ruby(Ruby on Rails)でブログサイトを作っています。
ログインユーザーがコメントをするような仕組みと想定しているのですが、どのようにして記事と関連づけるべきであるか迷っています。
**ユーザーと記事に紐づいたコメントの登録**を実装するうえで、表示されている記事にコメントを関連づけるためにはどうすればいいですか?
###該当のソースコード
・コメントコントローラー
```Ruby
class CommentsController < ApplicationController
 def create
   @comment = current_user.comments.build(comment_params)
   if @comment.save
     flash[:success] = "コメントが投稿されました!"
     redirect_to root_path
   else
     @feed_items = []
     redirect_to root_path
   end
 end
 def comment_params
   params.require(:comment).permit(:content)
 end
end
```
・マイグレーションファイル
```Ruby
class CreateComments < ActiveRecord::Migration[5.0]
 def change
   create_table :comments do |t|
     t.text :content
     t.references :user, foreign_key: true
     t.references :article, foreign_key: true
     t.timestamps
   end
   add_index :comments, [:user_id, :article_id, :created_at]
 end
end
```
・コメントモデル
```Ruby
class Comment < ApplicationRecord
 belongs_to :user
 belongs_to :article
 default_scope -> { order(created_at: :desc)}
 validates :user_id, presence: true
 validates :article_id, presence: true
end
```
・ビュー
```Ruby
<%= form_for(@comment) do |f| %>
 <%= render 'shared/error_messages', object: f.object %>
 <div class="field">
   <%= f.text_area :content, placeholder: "コメントを入力する" %>
 </div>
 <%= f.submit "コメントする", class: "btn btn-primary" %>
<% end %>
```
###試したこと
・ここからどうやって進めればよいのか見当がつかず、いっさい進められておりません。
###補足情報(言語/FW/ツール等のバージョンなど)
開発環境:Ruby on Rail 5.0.0.1
開発環境:Ruby on Rail 5.0.0.1
###追記情報(該当ソース)
・ビュー(articles/show.html.erb)
```
・・・
<section>
 <div class="title">
   <h2>コメント</h2>
   <% if logged_in? %>
     <div class="row">
       <aside class="col-md-4">
         <section class="cooment_form">
           <%= render 'shared/comment_form' %>
         </section>
       </aside>
     </div>
   <% else %>
     <div></div>
   <% end %>
   <%= render 'shared/feed' %>
</section>
・・・
```
・ビュー(shared/comment_form)
```Ruby
<%= form_for(@comment) do |f| %>
 <%= render 'shared/error_messages', object: f.object %>
 <div class="field">
   <%= f.text_area :content, placeholder: "コメントを入力する" %>
 </div>
 <%= f.submit "Post", class: "btn btn-primary" %>
<% end %>
```
・ビュー(shared/feed)
```Ruby
<%if @feed_items.any? %>
 <%= render @feed_items %>
 <%= will_paginate @feed_items %>
<% end %>
```
・コントローラー(artcles/controller)
```Ruby
class ArticlesController < ApplicationController
 before_action :comment_feed, only:[:show, :comment]
 def show
 end
 def search
   @articles = Article.paginate(page: params[:page])
   @categories = Category.all
 end
 def new
   @article = Article.new(create_params)
 end
 private
 def article_params
   params.require(:space).permit(:title, :content)
 end
 def set_article
   @article = Article.find(params[:id])
 end
 def comment_feed
   if logged_in?
     @comment = current_user.comments.build
     @feed_items = current_user.feed.paginate(page: params[:page])
   end
 end
end
```
  • Ruby

    15004 questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

  • Ruby on Rails

    15921 questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る