Я работаю над функцией модерации для своего приложения, которая основана на базовой структуре скаффолда. Что мне нужно, так это отредактировать несколько записей с логическим параметром , опубликованным
на false
. В Moderate.html
я получаю список всех неопубликованных записей с возможностью изменения их параметров , которые опубликованы
, what
и
. Ошибка появляется, когда я пытаюсь сохранить изменения с помощью действия complete
.
ArgumentError в NamesController # complete
Неизвестный ключ (и): 7, 1, 4
«7, 1, 4» - это идентификаторы моих неопубликованных записей.
Вот части моего кода:
#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 (12.06.2009, patchlevel 174)
[universal-darwin10.0] Rails 2.3.5
Журнал Rails для умеренных
и полных
действий:
Processing NamesController # умеренный (для 127.0.0.1 at 2010-10-16 21:36:42) [GET] [4; 35; 1 мНагрузка (0,6 мс) [0 м [0mSELECT * FROM "names" ГДЕ ("имена". "опубликовано" = 'f') [0 мин. Шаблон отрисовки внутри макеты / имена Отображение имен / модерация Завершено за 12 мс (Просмотр: 7, БД: 1) | 200 OK [http: // localhost / Moderate]
Обработка NamesController # завершена (для 127.0.0.1 в 2010-10-16 21:36:49) [POST] Параметры: {"commit" => "Ok", "Authentity_token" => "CtmsjIavksOMSIArrdovkkzuZzHVjkenFFMO5bHIvgg =", "name_ids" => {"7" => {"published" => "0", "what" => "Партия", "which" => "Крутая"}, "1" => {"опубликовано" => "1", "what" => "Россия", "which" => "Единая"}, "4" => {"опубликовано" => "0", "what" => "Организация", "which" => "Молдавская"}}}
[4; 36; 1 м Нагрузка (0,4 мс) [0 м
[0; 1mSELECT * FROM "names" ГДЕ ("names". "id" IN (7,1,4)) [0mNoMethodError (У вас есть объект nil когда ты этого не ожидал! Ты можешь ожидали экземпляра Array. Ошибка произошла при оценке nil.reject):
приложение / контроллеры / names_controller.rb: 47: взавершено '
каждый »
приложение / контроллеры / names_controller.rb: 46: в
приложение / контроллеры / names_controller.rb: 46: в `complete 'Рендеринг спасает / _trace (110,3 мс) Визуализированные спасения / _request_and_response (0,5 мс) Рендеринг спасает / макета (internal_server_error)