Rails 3 - параметры при создании действия, не присваивающие значения модели - PullRequest
1 голос
/ 01 февраля 2012

У меня проблема с тем, что при публикации значений формы для действия create значения не присваиваются новой модели.

Например -

У меня есть частичная форма, _form.html.erb в views/groups/:

<%= form_for @group, :html => { :multipart => true } do |f| %>
  <p>
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </p>
  <p>
    <%= f.label :website %><br />
    <%= f.text_field :website %>
  </p>
  <p>
    <%= f.label :description %><br />
    <%= f.text_area :description %>
  </p>
  <p>
    <%= f.label :image %><br />
    <%= f.file_field :image %>
  </p>
  <p>
    <%= f.submit %>
  </p>
<% end %>

Это отображается в views/groups/new.html.erb:

<h1>Group#new</h1>
<%= render :partial => "form" %>

Мое new действие выглядит так:

def new
    @group = Group.new
  end

И мое действие создания выглядит так:

def create
    #raise params.inspect
    @group = Group.new(params[:group])
    #raise @group.inspect
    if @group.save
            flash[:message] = "Group Created!"
            redirect_to groups_path
        else
            flash[:message] = "Sorry, there are errors in the form"
            render :new
        end
  end

Если я raise params.inspect, я получаю это:

{"utf8"=>"✓", "authenticity_token"=>"cVW7BgMKFU1z3QlyCOGq5y2t7IcKcsatVsXDDE1069g=", "group"=>{"name"=>"testname", "website"=>"testweb", "description"=>"testdesc"}, "commit"=>"Create Group", "action"=>"cr

... который, похоже, имеет хэш-значения my: group.

Если я попытаюсь присвоить его, проверьте следующее:

@group = Group.new(params[:group])
raise @group.inspect

Я получаю:

#<Group id: nil, name: nil, description: nil, website: nil, image: nil, created_at: nil, updated_at: nil>

Что мне здесь не хватает? У меня есть 2 других контроллера, структурированных очень похожим образом, но я не уверен, что я здесь сделал неправильно -

Спасибо!

Ответы [ 2 ]

2 голосов
/ 01 февраля 2012

Также стоит проверить, правильно ли установлено массовое назначение . У вас есть attr_accessible :name... в модели Group?

Если это так, проверьте, установит ли @group.name = params[:group][:name] значение name. Обычно, если это работает, это означает, что поле не может быть массово назначено через = hash.

0 голосов
/ 01 февраля 2012

Обратите внимание, что params[:group] зависит от хеша #with_indifferent_access. Время от времени я сталкиваюсь с чем-то вроде этого, что должно быть with_indifferent_access, но не из-за плагина, манипулирующего параметрами или чем-то подобным. Стоит проверить (т. Е. Попробовать params['group']).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...