2017-07-13 35 views
0

我正在構建一個相當簡單的Rails 5應用程序。您創建「電影」,然後可以爲這些電影創建「評論」。 Rails正在做一些奇怪的事情。我有我的應用程序設置,而不是一個「新的」行動和相應的視圖,我有形式來創建新的電影在application.html.erb文件中包含的模式。然後,我在控制器中爲所有電影視圖提供@newmovie = Movie.new,因此數據在任何地方都可用。Rails拋出錯誤,而不是驗證

我對影片對象設置這樣的驗證:

class Movie < ApplicationRecord 
    has_many :reviews 
    validates :title, :director, :poster, :synopsis, presence: true 
end 

當我填寫表格對我的索引視圖中創建的模式一個新的電影,並有意離開領域的空白(觸發驗證),我得到這個:

enter image description here

,而不是簡單地形成不接受輸入。這裏發生了什麼?我不能有這樣的錯誤發生。以前,我有一個「新」的觀點。這在以前的設置中沒有發生。幫幫我!

這裏是我的整個電影控制器:

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

newmovies_controller動作,你錯過了initalize實例變量@newmovie

添加以下代碼movies_controller

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

我其實已經有了。我稍微更新了一下這個問題。 –

+0

粘貼你的控制器代碼 – puneet18

+0

已經結束了。謝謝您的幫助。 –