初めて質問させて頂きます!
form_withを使って投稿詳細ページにレビューを入力するフォームを作ったのですが、createアクションがうまく行きません。
エラーログを見るとコントローラにパラメータは送信されているようなのですが、@review.saveの時にROLLBACKが起きている状態で、どこで問題が起きているかが分からず質問させて頂きました。
なお、planモデルとreviewモデル、及びuserモデルとreviewモデルにはそれぞれ一対多のアソシエーションを定義しており、reviewsテーブルには以下のカラムを挿入することを想定しています。
rate
review
user_id
post_id
以上、どなたかよろしくお願いします。
/reviews/_form.html.erb
<%= form_with(model: [ @plan, Review.new]) do |form| %> <div class="field"> <%= form.label :rate %> <%= form.number_field :rate %> </div> <div class="field"> <%= form.label :review %> <%= form.text_field :review %> </div> <div class="actions"> <%= form.submit %> </div> <% end %>
routes.rb
ails.application.routes.draw do devise_for :users resources :examples resources :users, only: [:show] resources :plans do resources :reviews, only: [:create, :update, :delete] #/plans/:plan_id/reviews(.:format) #Memo: 遷移先をplan_reviews_pathで指定 end # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html root to: 'plans#index' # resource :mypage end
reviews_controller
class ReviewsController < ApplicationController before_action :set_review, only: [:create, :edit, :update, :destroy] (略) # POST /reviews def create @plan = Plan.find(params[:plan_id]) @review = Review.new(review_params) @review.user_id = current_user.id respond_to do |format| if @review.save format.html { redirect_to "plans/show", notice: 'レビューしました' } else format.html { render "plans/show" } end end end (略) private # Use callbacks to share common setup or constraints between actions. def set_review @review = Review.find(params[:id]) end # Never trust parameters from the scary internet, only allow the white list through. def review_params params.require(:review).permit(:rate, :review).merge(user_id: current_user.id) end end
エラーログ
Started POST "/plans/10/reviews" for 10.0.2.2 at 2018-08-04 20:34:08 +0900 Cannot render console from 10.0.2.2! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255 Processing by ReviewsController#create as JS Parameters: {"utf8"=>"✓", "authenticity_token"=>"9pAqwwnPFKKynkPfR1EyIcRP6SEiSEoXFdxpIj/Fxmo2sVG1Kg9IMw2CIMUlGXImPvLO7JX+97w8q5lOSDjpeQ==", "review"=>{"rate"=>"5", "review"=>"tmp"}, "commit"=>"Create Review", "plan_id"=>"10"} Plan Load (0.3ms) SELECT `plans`.* FROM `plans` WHERE `plans`.`id` = 10 LIMIT 1 ↳ app/controllers/reviews_controller.rb:27 User Load (0.4ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 ORDER BY `users`.`id` ASC LIMIT 1 ↳ app/controllers/reviews_controller.rb:73 (0.1ms) BEGIN ↳ app/controllers/reviews_controller.rb:31 User Load (0.3ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1 ↳ app/controllers/reviews_controller.rb:31 (0.5ms) ROLLBACK ↳ app/controllers/reviews_controller.rb:31 Rendering plans/show.html.erb within layouts/application Rendered reviews/_form.html.erb (4.2ms) Review Load (0.3ms) SELECT `reviews`.* FROM `reviews` WHERE `reviews`.`plan_id` = 10 ↳ app/views/plans/show.html.erb:42 Rendered plans/show.html.erb within layouts/application (41.7ms) Completed 200 OK in 456ms (Views: 431.8ms | ActiveRecord: 1.9ms)
回答1件
あなたの回答
tips
プレビュー