簡単なフォームを作成して、料理レックに投稿されたレシピについて新しいレビューを作成します。私はレシピのショーのページのレビューフォームをレンダリングするが、それは私に同じエラー与え続け:Railsシンプルフォーム未定義メソッド `model_name 'for nil:NilClass
nilのための未定義のメソッド `MODEL_NAME」:NilClassを私は部分的な新しいレビューフォームではレンダリングされません
app/views/recipes/show.html.erb、代わりにapp/views/reviews/new.html.erbというファイルを作成してください。私は、レシピのページでレンダリングしようとすると、フォームが動作しない理由を理解していません。ここで
は私のコードです:
シンプルなフォルムのため:
<%= simple_form_for(@review, url: recipe_reviews_path(@recipe)) do |f| %>
<%= f.error_notification %>
<%= f.input :content %>
<%= f.input :rating %>
<%= f.button :submit, class: "btn btn-success" %>
<% end %>
レビューコントローラ:
class ReviewsController < ApplicationController
def new
@recipe = recipe.find(params[:recipe_id])
@review = Review.new(review_params)
end
def create
@recipe = recipe.find(params[:recipe_id])
@review = Review.new(review_params)
@review.recipe = @recipe
if @review.save
redirect_to recipe_path(@recipe)
else
render 'recipe/show'
end
end
private
def review_params
params.require(:review).permit(:content, :rating)
end
end
レシピコントローラ:
class RecipesController < ApplicationController
skip_before_action :authenticate_user!
def index
@recipes = Recipe.all
end
def show
@recipe = Recipe.find(params[:id])
@user = User.find(@recipe.user_id)
@full_name = @recipe.user.first_name + " " + @recipe.user.last_name
end
end
レシピショーのページ:
<div class="review">
<%= render 'review/new' %>
<% @recipe.reviews.each do |review| %>
<%= review.content %>
<%= review.rating %>
<% end %>
</div>
ルート:
resources :recipes, only: [:index, :show] do
resources :reviews, only: [:create]
end
モデル:
class Recipe < ActiveRecord::Base
belongs_to :user
has_many :ingredients, dependent: :destroy
has_many :reviews, dependent: :destroy
validates :name, :summary, :course, :kitchen, :photo, :description, presence: true
validates :summary, length: { maximum: 30 }
mount_uploader :photo, PhotoUploader
accepts_nested_attributes_for :ingredients, reject_if: :all_blank, allow_destroy: true
end
モデルのレビュー:
class Review < ActiveRecord::Base
belongs_to :recipe
validates :content, length: { minimum: 20 }
validates :rating, presence: true
validates_numericality_of :rating, :greater_than_or_equal_to => 0, :less_than_or_equal_to => 5
validates :content, presence: true
end
誰もが問題を見ることができますか?前もって感謝します!
モデルとレシピコントローラを投稿してもよろしいですか? –
私はそれらを投稿します – Seifer
**あなたの問題は** @ recipe = Recipe.find(params [:id])**が対応するレシピを見つけていないし、nilを返していないことにあります。次に、ビューで、あなたが**@recipe.reviews.each**と言うとき、それはあなたがnilクラスからのモデル名(レビュー)を参照していると不平を言っています。 –