【发布时间】:2011-04-26 08:09:13
【问题描述】:
我正在为我的应用程序开发一个调节功能,它基于一个基本的脚手架结构。我需要的是在false 上使用布尔参数publised 编辑几条记录。在moderate.html 中,我获得了所有未发布条目的列表,这些条目能够更改其参数which、what 和published。当我尝试通过 complete 操作保存更改时,会出现错误。
NamesController#complete 中的参数错误
未知键:7、1、4
“7,1,4”是我未发表记录的id。
以下是我的代码部分:
#names_controller.rb
def moderate
@names = Name.find(:all, params[:name_ids], :conditions => {:published => false})
respond_to do |format|
format.html { render :action => "moderate" }
format.xml
end
end
def complete
@names = Name.find(params[:name_ids])
@names.each do |name|
name.update_attributes!(params[:name].reject { |k,v| v.blank? })
end
flash[:notice] = "Updated records!"
redirect_to names_path
end
#moderate.html.erb
<% form_tag complete_names_path do %>
<% @names.each do |name| %>
<fieldset>
<% fields_for "name_ids[#{name.id}]", name do |name_fields| %>
<%= name_fields.text_field :which %>
<%= name_fields.text_field :what %>
<%= name_fields.check_box :published %>
<% end %>
</fieldset>
<% end %>
<%= submit_tag "Ok" %>
<% end %>/
#routes.rb
ActionController::Routing::Routes.draw do |map|
map.connect 'moderate', :controller => 'names', :action => 'moderate'
map.resources :names, :collection => { :complete => :put}
map.root :names
map.connect ':controller/:action/:id'
map.connect ':controller/:action/:id.:format'
我明白,name_ids 有问题,但不明白,我该怎么办。
提前谢谢你。
ruby 1.8.7(2009-06-12 补丁级别 174)
[universal-darwin10.0] Rails 2.3.5
moderate 和 complete 操作的 Rails 日志:
Processing NamesController#moderate (for 127.0.0.1 at 2010-10-16 21:36:42) [GET] [4;35;1mName 加载 (0.6ms)[0m [0mSELECT * FROM "names" WHERE (“名称”。“已发布”='f')[0m 内的渲染模板 布局/名称渲染名称/适度 在 12 毫秒内完成(查看:7,DB:1)| 200 OK [http://localhost/moderate]
处理名称控制器#complete (127.0.0.1 2010-10-16 21:36:49) [POST] 参数:{"commit"=>"Ok", "authenticity_token"=>"CtmsjIavksOMSIArrdovkkzuZzHVjkenFFMO5bHIvgg=", "name_ids"=>{"7"=>{"已发布"=>"0", "what"=>"Партия", "which"=>"Крутая"}, "1"=>{"已发布"=>"1", "what"=>"Россия", "which"=>"Единая"}, "4"=>{"已发布"=>"0", "什么"=>"Организация", "which"=>"Молдавская"}}}
[4;36;1mName 负载 (0.4ms)[0m
[0;1mSELECT * FROM "names" WHERE ("names"."id" IN (7,1,4)) [0mNoMethodError (你有一个 nil 对象 当你没想到的时候!你可能 期望有一个 Array 的实例。 评估时发生错误 nil.reject):
应用程序/控制器/names_controller.rb:47:incomplete'each'
app/controllers/names_controller.rb:46:in
应用程序/控制器/names_controller.rb:46:in `完成'渲染救援/_trace (110.3ms) 渲染救援/_request_and_response (0.5ms) 渲染救援/布局 (internal_server_error)
【问题讨论】:
标签: ruby-on-rails forms params scaffold