Rails 3 - params on create action not not value to model

时间:2012-02-01 02:53:51

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

我遇到的问题是,当表单值过帐到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

...似乎有我的:组哈希值就好了。

如果我尝试分配它,请检查:

@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 个答案:

答案 0 :(得分:2)

还值得查看是否正确设置了质量分配。您在attr_accessible :name...模型中有Group吗?

如果是,请检查@group.name = params[:group][:name]是否设置name值。通常如果这有效,则意味着该字段无法通过= hash进行批量分配。

答案 1 :(得分:0)

请注意,params[:group]取决于散列为#with_indifferent_access。每隔一段时间我都会碰到应该 with_indifferent_access这样的东西,但不是因为插件操纵了params或其他类似的东西。值得一试(即尝试params['group'])。