2015-02-22 2 views
3

Я просмотрел несколько руководств, рубиновых гидов и несколько вопросов о стеке. Сначала я попробовал simple_form и теперь старомодный способ и не могу понять, почему параметры не передаются.Ошибка Rails 4 "param отсутствует или значение пуст:" в create

Контроллер:

def new 
    @topgem = Topgem.new 
end 

def create 
    @topgem = Topgem.new(topgem_params) 

    if @topgem.save 
    redirect_to @topgem 
    else 
    render 'new' 
    end 

...

private 
    def topgem_params 
     params.require(:name).permit(:url, :description, :downloads, :last_updated) 
    end 

Модель:

class Topgem < ActiveRecord::Base 

    has_many :votes 
    has_many :users, through: :votes 

    validates :name, presence: true, uniqueness: true, :length => { 
    :minimum =>2, 
    :maximum =>50} 

    validates :url, presence: true 
    validates :description, presence: true 
    validates :downloads, numericality: { only_integer: true } 
end 

new.html.erb

<%= form_for(@topgem) do |f| %> 


    <%= f.label :name %>: 
    <%= f.text_field :name %><br /> 

    <%= f.label :url %>: 
    <%= f.text_field :url %><br /> 

    <%= f.label :description %>: 
    <%= f.text_field :description %><br /> 

    <%= f.label :downloads %>: 
    <%= f.number_field :downloads %><br /> 


    <%= f.submit %> 
<% end %> 

Ошибки я получаю:

ActionController::ParameterMissing at /topgems 
param is missing or the value is empty: name 

здесь выберите переменный экземпляр:

Переменного экземпляр

@_action_has_layout 
true 

@_routes  
nil 

@_headers 
{"Content-Type"=>"text/html"} 

@_status  
200 

@_params  
{"utf8"=>"✓", "authenticity_token"=>"Gx/UwvcvWZYWAUHxWGYlUQB/PNNUniBpCjlM1WEHAm+luYl94Kky5Ae9Ur40YVtrN2ebEEX8C0G3Cewu/SJSow==", "topgem"=>{"name"=>"bfgf", "url"=>"dd", "description"=>"ff", "downloads"=>"343"}, "commit"=>"Create Topgem", "controller"=>"topgems", "action"=>"create"} 
+0

использования 'params.require (: topgem) .permit (: имя,: URL,: Описание,: загрузка,: last_updated)' – DevMarwen

+0

Спасибо за редактирование, @ На Фрейнде. – jeffhale

+0

, который работает, @devmarwen. Спасибо. – jeffhale

ответ

9

Вы необходимые params[:name], но фактический PARAMS является params[:topgem][:name].

Измените метод topgem_params к

params.require(:topgem). 
    permit(
    :name, 
    :url, 
    :description, 
    :downloads, 
    :last_updated 
) 
+0

Вот и все. Спасибо огромное! – jeffhale

Смежные вопросы