そのため、ユーザーが映画についてレビューを残すためのフォームを作成しようとしていますが、Rails は未定義のメソッド エラーをスローし続けます。私のアプリでは、ユーザーが映画をレビューできます。そのため、ユーザーがその映画のコンテキストでレビューを作成できるフォームが必要です。私のコードは以下のとおりです。どんな助けでも大歓迎です。私の唯一の混乱は、リソースをネストする必要があるのか 、それとも間違った値を指定して使用しているのかわからないことですform_for
私のルートファイルは次のようになります。
resources :users
resources :movies
resources :reviews
resources :sessions, only: [:new, :create, :destroy]
次のような Reviews コントローラーがあります。
class ReviewsController < ApplicationController
def create
movie_id = params[:review].delete(:movie_id)
@review = Review.new(params[:review])
@review.movie_id = movie_id
@review.save
redirect_to movie_path(@review.movie)
end
end
そして、私のフォームは次のようになります。
<h2>Leave a Review</h2>
<%= form_for(@review) do |f| %>
<%= f.hidden_field :movie_id %>
<div class="field">
<%= f.text_area :content, placeholder: "Write a new review..." %>
</div>
<%= f.submit "Submit", class: "btn btn-large btn-primary" %>
<% end %>
私は3つのモデルを持っています:
ユーザー:
class User < ActiveRecord::Base
has_secure_password
has_many :reviews, dependent: :destroy
has_many :movies, through: :reviews
end
映画:
class Movie < ActiveRecord::Base
has_many :reviews
has_many :users, through: :reviews
end
レビュー:
class Review < ActiveRecord::Base
attr_accessible :content, :movie_id
belongs_to :user
belongs_to :anime
end
エラーは次のとおりです。
NoMethodError in Movies#show
Showing /Users/david/Sites/Rails/Chirp/app/views/movies/show.html.erb where line #32 raised:
undefined method `model_name' for NilClass:Class
Extracted source (around line #32):
29:
30: <h2>Leave a Review</h2>
31:
32: <%= form_for(@review) do |f| %>
33: <%= f.hidden_field :movie_id %>
34: <div class="field">
35: <%= f.text_area :content, placeholder: "Write a new review..." %>