2015-09-22 72 views
5

使用郵遞員在數據庫中創建一些JSON POST,您可以使用代碼片段進行測試。得到一個錯誤,說方法'電影'是未定義的,但該方法永遠不會被調用。RoR - 未定義的方法`電影'爲#<Movie:0x007fa43a0629e0>

{"movie": { 
    "title": "Its a Mad Mad Word", 
    "year": "1967", 
    "summary": "So many big stars" 
    } 
} 

下面是代碼和誤差如下:

undefined method 'movie' for #<Movie:0x007fcfbd99acc0>

應用控制器

class ApplicationController < ActionController::Base 
    protect_from_forgery with: :null_session 
end 

控制器
module API 
    class MoviesController < ApplicationController 
... 
     def create 
      movie = Movie.new({ 
       title: movie_params[:title].to_s, 
       year: movie_params[:year].to_i, 
       summary: movie_params[:summary].to_s 
      }) 
      if movie.save 
       render json: mov, status: 201 
      else 
       render json: mov.errors, status: 422 
      end 

     end 

     private 
     def movie_params 
      params.require(:movie).permit(:title, :year, :summary) 
     end 
    end 
end 

條型號

class Movie < ActiveRecord::Base 
    validates :movie, presence: true 
end 

遷移

class CreateMovies < ActiveRecord::Migration 
    def change 
    create_table :movies do |t| 
     t.string :title 
     t.integer :year 
     t.text :summary 

     t.timestamps null: false 
    end 
    end 
end 

路線

Rails.application.routes.draw do 
    namespace :api do 
    resources :movies, only: [:index, :show, :create] 
    end 
end 
+0

沒有使用Rails的作爲API,但在你的模型中驗證看起來很腥。 –

+0

既然你是初學者,我真的需要說,我喜歡你的問題看起來如何! –

回答

4

驗證來確保只有有效的數據被保存到數據庫中,所以您應該驗證影片的字段(標題,年份,摘要)

validates :movie, presence: true 

將其更改爲:

validates :title, presence: true 
validates :year, presence: true 
validates :summary, presence: true 

可以/編輯通過huanson 得到here

更多信息,你也可以概括:

validates :title, :year, :summary, presence: true 
相關問題