前提・実現したいこと
railsでレビューサイトの個人アプリを作っています。
レビューに作品ごとのidを入れたいです。
発生している問題・エラーメッセージ
レビューに作品ごとのidを入れたい
作品をpostsテーブルという名前で作成。レビューをreviewsテーブルという名前で作成。
reviewsテーブルにpost_idというカラムを作りました。ここに作品ごとの(post.id)idを入れたいのですが作品ごとのidが入らずカラムに全部0が入ります。
エラーメッセージ
該当のソースコード
ルーティング
Rails.application.routes.draw do devise_for :users get '/' => 'posts#index' get 'posts/new' => 'posts#new' post 'posts/create' => 'posts#create' get 'posts/:id' => 'posts#show' post 'posts/:id' => 'posts#show' post 'reviews/create' => 'reviews#create' get 'reviews/new' => 'reviews#new' resources :posts, only: :show do resources :reviews, only: [:new, :create] collection do get 'search' end end end
reviewsコントローラー
def new @post = Post.find(params[:post_id]) end def create @reviews = Review.new(nickname: params[:nickname],rate: params[:rate],review: params[:review],post_id: params[:post_id]) if @reviews.save! redirect_to('/') end end
postのshow.html.erb(作品を表示しているところ。ここからreviewのnew.html.erbに飛ぶ)
<div class="show_main"> <h1 class="show_title"><%= @post.name %></h1> <div class="content_post" style="background-image: url(<%= @post.image %>);"> </div> <a href="/reviews/new?post_id=<%= @post.id %> "class="review_link">この作品をレビューする</a> <% @reviews.each do |review| %> <div class="review"><%= review.nickname %></div> <div class="review"><%= review.review %></div> <%end%>
reviewのnew.html.erb(レビューの投稿画面)
<%= form_tag('/reviews/create',{multipart: true}) do %> <input placeholder="ニックネーム" type="string" name="nickname"> <input type="integer" name="rate"> <textarea name="review" rows="4" cols="40" type="text">ここに感想を記入してください。</textarea> <%= hidden_field_tag :post_id,value: @post.id %> <input type="submit" value="SENT"> <%end%>
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
modelには特に触れていません。
post.rbにhas_many :reviews
review.rbにbelongs_to :post
をかくと送信ができずMySQLにデータが入らないので
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー