いつも大変お世話になっております。
こちらで発生していたエラーに苦しんでいます。口コミサイトをrailsで開発しているのですが、口コミを投稿する際に発生します。
ローカル環境→ 成功
本番環境(PCブラウザ)→ 成功
本番環境(スマートフォン)→ エラー
今回はスマートフォンからのみのエラーに苦しんでいます。。
Ruby
1app[web.1]: ActionView::Template::Error (First argument in form cannot contain nil or be empty): 2app[web.1]: 40: 3app[web.1]: 41: <div class="space"></div> 4app[web.1]: 42: 5app[web.1]: 43: <%= form_for(@post) do |f| %> 6app[web.1]: 44: <section class="menu-review"> 7app[web.1]: 45: <div class="title"> 8app[web.1]: 46: <div class="container"> 9app[web.1]: app/views/smartphone/reviews/new.html.erb:43:in `_app_views_smartphone_reviews_new_html_erb___1229707472540771907_15716720'
##該当するソースコード
ビュー
Ruby
1 <div class="container"> 2 <%= f.hidden_field :space_id, value: @review.space.id %> 3 <div class="post-rate"> 4 <!-- ここにStar Rateが入ります --> 5 <div class="form-group"> 6 <label for="rate">評価</label> 7 <%= f.select :rate, {'1' => 1, '2' => 2, '3' => 3, '4' => 4, '5' => 5,}, class: "form-control" %> 8 </div> 9 </div> 10 <div class="post-contents"> 11 <!-- ここにReview内容が入ります --> 12 <div class="form-group"> 13 <label for="textarea">口コミを入力</label> 14 <%= f.text_area :content, class: "form-control", placeholder: "口コミ内容", rows: "5" %> 15 </div> 16 </div> 17 <div class="post-photo"> 18 <label for="textarea">画像を投稿</label> 19 <%= f.fields_for :review_image do |review_image| %> 20 <%= review_image.file_field :image %> 21 <% end %> 22 </div> 23 <div class="post-btn"> 24 <%= f.submit "投稿する", class: "button-review" %> 25 </div> 26 <% end %> 27 </div> 28 </div>
コントローラー
Ruby
1class ReviewsController < ApplicationController 2 before_action :set_review, only:[:show, :edit, :update, :destroy] 3 4 def create 5 @review = current_user.reviews.create(create_params) 6 if @review.save 7 flash[:success] = "口コミが投稿されました!" 8 redirect_to root_path 9 else 10 flash[:alert] = "口コミの投稿に失敗しました。" 11 redirect_to root_path 12 end 13 end 14 15 def show 16 end 17 18 def update 19 if @review.update_attributes(create_params) 20 flash[:success] = "口コミが更新されました" 21 redirect_to @review 22 else 23 render 'edit' 24 end 25 end 26 27 def new 28 @space = Space.find(params[:id]) 29 if signed_in? 30 @post = current_user.reviews.new 31 @post.build_review_image 32 end 33 end 34 35 def destroy 36 @review.destroy 37 flash[:success] = "口コミが削除されました" 38 redirect_to request.referrer || root_url 39 end 40 41 def edit 42 end 43 44 private 45 46 def set_review 47 @review = Review.find(params[:id]) 48 end 49 50 def create_params 51 params.require(:review).permit(:id, :content, :rate, :title, :space_id, :user_id, review_image_attributes: [:image]) 52 end 53 54 def correct_user 55 @review = current_user.reviews.find_by(id: params[:id]) 56 redirect_to root_url if @review.nil? 57 end 58end 59
##試してみたこと
「First argument in form cannot contain nil or be empty」こちらのエラーをググってみました。
すると、teratailさんで同様のエラーに苦しんでいる方を見つけまして。
https://teratail.com/questions/16823
そこで、もともとコントローラーでbuild記述していたところをnewに変更しました。
変更前
ruby
1 if signed_in? 2 @post = current_user.reviews.build 3 @post.build_review_image 4 end
変更後
ruby
1 if signed_in? 2 @post = current_user.reviews.new 3 @post.build_review_image 4 end
しかし、変わらずエラーとなってしまいました。
すみませんが、どなたかご教示していただけませんでしょうか。
同じエラーで申し訳ございません。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/07/27 06:39