2015-07-01 2 views
0

У меня есть контроллер 'news_controller.rb' для взаимодействия с базой данных. Когда я пытаюсь создать элемент строки базы данных (я делаю это с помощью автоматизированного сценария создания почтовых запросов), я получаю следующее сообщение об ошибкеПараметр отсутствует Rails 4

ActionController::ParameterMissing (param is missing or the value is empty: news): app/controllers/api/news_controller.rb:57:in `news_params'app/controllers/api/news_controller.rb:28:in `create' 

Когда я использую Params [: категория], Params [: заголовок] и т.д. , внутри создать действие, то оно отлично работает. Каковы возможные причины и решения для этого?

Вот мой код контроллера:

module Api 
    class NewsController < Api::ApiController 
     respond_to :json 

     def index 
      @news = News.all 
      respond_with :news => @news 
     end 

     def show 
      @news = News.find(params[:id]) 
      respond_with :news => @news 
     end 

     def new 
      @news = News.new 
      respond_with :news => @news 
     end 

     def edit 
      @news = News.find(params[:id]) 
      respond_with :news => @news 
     end 

     def create 
      if !News.exists?(headline: params[:headline]) 
       #@news = News.new(:category => params[:category], :headline => params[:headline], :content => params[:content], :image_url => params[:image_url]) 
       @news = News.new(news_params) 
       if @news.save 
        respond_with :news => @news 
       else 
        respond_with @news.errors 
       end 
      end 
     end 

     def update 
      @news = News.find(params[:id]) 

      if @news.update(news_params) 
      respond_with :news => @news 
      else 
      respond_with @news.errors 
      end 
     end 

     def destroy 
      @news = News.find(params[:id]) 
      @news.destroy 
      respond_to do |format| 
      format.json { head :no_content } 
      end 
     end 

     private 
      def news_params 
      params.require(:news).permit(:category, :headline, :content, :image_url) 
      end 
    end 
end 
+0

В 'news_params', вы упомянули, что' PARAMS [: новости] 'требуется. Ошибка вызвана отсутствием этого параметра в запросе. – Santhosh

+0

Пожалуйста, разместите свой код формы и журнал параметров. – Pavan

ответ

2

Вашего params имеет значение

params = { category: 'value', headline: 'value', .... } 

При использовании news_params вы ожидаете ваш PARAMS быть отформатирован как

params = { news: { category: 'value', headline: 'value', .... }} 

Но это не случай.

Вот почему это работает, когда вы используете

@news = News.new(:category => params[:category], :headline => params[:headline], :content => params[:content], :image_url => params[:image_url]) 

И не работает с

@news = News.new(news_params) 
# news_params is nil 
Смежные вопросы