2017-07-13 8 views
0

私はかなり簡単な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 

)、私はこれを取得:代わりに、単に入力を受け付けない形の

enter image description here

。何が起きてる?私はこのようなエラーが起きることはありません。以前は、私は新しいビューを持っていました。これは以前の設定では起こりませんでした。助けて!ここで

は私の全体の映画コントローラです:movies_controllernewアクションで

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 
+0

をあなたは形でそれを使用し、 '@のnewmovie'に割り当てることができます前に、映画の新しいインスタンスを作成する必要があります。それはあなたのどこかのコントローラで起こるはずです。 – lurker

+0

あなたのルートが設定されているかどうかを知る必要があります。失敗したフォームは 'new'か' index'から来ますか?不明な点... 'new'の場合、' new'メソッドで '@ newmovie'を設定していません。 – lurker

答えて

0

、あなたはインスタンス変数@newmovieをinitalizeする逃しました。

movies_controllerにコードの下に追加します。

class MoviesController < ApplicationController 
    def new 
     @newmovie = Movie.new 
    end 
    ... 
    end 
+0

私は実際に既に持っています。私はそれを含めるために少し質問を更新しました。 –

+0

コントローラコード – puneet18

+0

が貼り付けられています。助けてくれてありがとう。 –

関連する問題