基本的なスキャフォールド構造に基づいた、アプリケーションのモデレート機能に取り組んでいます。必要なのは、のブールパラメータを使用していくつかのレコードを編集することpublised
ですfalse
。で、パラメータをmoderate.html
変更できるすべての未公開エントリのリストを取得しています。アクションを通じて変更を保存しようとすると、エラーが表示されます。which
what
published
complete
NamesController#completeのArgumentError
不明なキー: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
理解していますが、どうすればよいかわかりません。前もって感謝します。
ルビー1.8.7(2009-06-12パッチレベル174)
[universal-darwin10.0] Rails 2.3.5
Railsのログmoderate
とcomplete
アクション:
NamesController#moderateの処理(2010-10-16 21:36:42の127.0.0.1の場合)[GET] [4; 35; 1mName Load(0.6ms)[0m [0mSELECT * FROM "names" WHERE("names"。 "published" ='f')[0mレイアウト/名前内のレンダリングテンプレート名前/中程度のレンダリング12msで完了(ビュー:7、DB:1)| 200 OK [http:// localhost / moderate]
NamesController#completeの処理(2010-10-16 21:36:49の127.0.0.1の場合)[POST]パラメーター:{"commit" => "Ok"、 "authenticity_token" => "CtmsjIavksOMSIArrdovkkzuZzHVjkenFFMO5bHIvgg ="、 "name_ids" = > {"7" => {"published" => "0"、 "what" => "Партия"、 "which" => "Крутая"}、 "1" => {"published" => "1" 、"what" => "Россия"、 "which" => "Единая"}、 "4" => {"published" => "0"、 "what" => "Организация"、 "which" => " Молдавская"}}}
[4;36; 1mName Load(0.4ms)[0m
[0; 1mSELECT * FROM" names "WHERE("names"。"id "IN(7,1,4))[0mNoMethodError(予期していなかったときにnilオブジェクトがあります!Arrayのインスタンスを予期していた可能性があります。nil.rejectの評価中にエラーが発生しました):
app / controllers / names_controller.rb:47:in each'app / controllers /names_controller.rb:46:in `complete'complete'
app/controllers/names_controller.rb:46:inレンダリングされたレスキュー/_trace(110.3ms)レンダリングされたレスキュー/ _request_and_response(0.5ms)レンダリングされたレスキュー/レイアウト(internal_server_error)