私はかなり簡単なRails 5アプリケーションを構築しています。 「ムービー」を作成し、そのムービーの「レビュー」を作成することができます。 Railsは何か変なことをしています。私は自分のアプリケーションをセットアップして、新しいアクションとそれに対応するビューの代わりに、application.html.erbファイルに含まれているモーダルで新しいムービーを作成するフォームを持っています。次に、すべてのムービービューのコントローラに@newmovie = Movie.newを指定して、どこでもデータを利用できます。Rails throw Errorを検証する代わりに
は、私はこのようなムービーオブジェクトのセットアップのための検証を持っている:
私は、インデックスビューでモーダルで新しいムービーを作成し、意図的に検証をトリガーする(空白フィールドを残して、フォームに必要事項を記入class Movie < ApplicationRecord
has_many :reviews
validates :title, :director, :poster, :synopsis, presence: true
end
)、私はこれを取得:代わりに、単に入力を受け付けない形の
。何が起きてる?私はこのようなエラーが起きることはありません。以前は、私は新しいビューを持っていました。これは以前の設定では起こりませんでした。助けて!ここで
は私の全体の映画コントローラです:movies_controller
のnew
アクションで
class MoviesController < ApplicationController
before_action :find_movie, only: [:show, :edit, :update, :destroy ]
before_action :authenticate_user!, only: [:new, :create, :edit, :update, :destroy]
before_action :find_newmovie, only: [:show, :index, :new, :edit]
def show
@reviews = @movie.reviews.all.order(created_at: :desc).paginate(:page => params[:page], :per_page => 3)
@review = Review.new
if @movie.reviews.blank?
@average_review = 0
else
@average_review = @movie.reviews.average(:rating).round(2)
end
end
def index
@movies = Movie.all.order(title: :asc).paginate(:page => params[:page], :per_page => 3)
@newmovie = Movie.new
end
def new
@movie = Movie.new
end
def create
@movie = Movie.create(movie_params)
@movie.user_id = current_user.id
if @movie.save
flash[:success] = "Your movie was created!"
redirect_to root_path
else
flash[:danger] = "There was a problem with your request"
render :new
end
end
def edit
end
def update
if @movie.update(movie_params)
flash[:success] = "Your movie was updated"
redirect_to movie_path
else
flash[:danger] = "There was a problem with your request"
end
end
def destroy
if @movie.destroy
flash[:success] = "Your movie was removed"
redirect_to movies_path
else
flash[:danger] = "There was a problem with your request"
render :index
end
end
private
def movie_params
params.require(:movie).permit(:title, :director, :poster, :synopsis, :user_id)
end
def find_movie
@movie = Movie.find(params[:id])
end
def find_newmovie
@newmovie = Movie.new
end
end
をあなたは形でそれを使用し、 '@のnewmovie'に割り当てることができます前に、映画の新しいインスタンスを作成する必要があります。それはあなたのどこかのコントローラで起こるはずです。 – lurker
あなたのルートが設定されているかどうかを知る必要があります。失敗したフォームは 'new'か' index'から来ますか?不明な点... 'new'の場合、' new'メソッドで '@ newmovie'を設定していません。 – lurker