我遇到的问题是,当表单值过帐到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个其他控制器结构非常相似,但我不确定我在这里做错了什么 -
谢谢!
答案 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']
)。