Скорее всего, вам нужно получить только ключи из хэша name_ids. Попробуйте:
@names = Name.find(params[:name_ids].keys)
Отдельной проблемой является ваша ссылка на params [: name], которая равна нулю. Вы имели в виду (EDIT: используйте to_s для соответствия ключу params, lol):
@names.each do |name|
name.update_attributes!(params[:name_ids][name.id.to_s].reject { |k,v| v.blank? })
end
РЕДАКТИРОВАТЬ (краткое пояснение):
То, что происходило, состояло в том, что у вас был вложенный хэш в params, params [: name_ids]. Это выглядело как:
"name_ids"=>{"7"=>{"published"=>"0", "what"=>"Партия", "which"=>"Крутая"}, "1"=>{"published"=>"1", "what"=>"Россия", "which"=>"Единая"}, "4"=>{"published"=>"0", "what"=>"Организация", "which"=>"Молдавская"}}
Метод ActiveRecord 'find' может принимать массив идентификаторов, но не хэш значений. То, что вы изначально отправляли на «найти» в этой строке:
@names = Name.find(params[:name_ids])
... было значением для params [: name_ids]:
{"7"=>{"published"=>"0", "what"=>"Партия", "which"=>"Крутая"}, "1"=>{"published"=>"1",
"what"=>"Россия", "which"=>"Единая"}, "4"=>{"published"=>"0", "what"=>"Организация",
"which"=>"Молдавская"}
Когда вы хотели:
@names = Name.find(['7','1','4'])
это то, что вызывает params [: name_ids] .keys.
Вторая проблема была в этой строке:
name.update_attributes!(params[:name].reject { |k,v| v.blank? })
В параметрах не было значения ': name', поэтому вызов 'reject' вызвал ошибку 'no method' - для объекта nil нет метода 'reject'. Вы хотели обновить атрибуты для «имени», которое соответствует конкретному имени в цикле. Это означало, что вы хотели получить значения из params [: name_ids] [: id] где: id - это идентификатор «name».
Все восходит к тому, как fields_for создал параметры для начала. Эта строка:
<% fields_for "name_ids[#{name.id}]", name do |name_fields| %>
означало, что params будет содержать хеш с именем name_ids с ключами, соответствующими name.id, которые сами будут содержать хэши атрибутов, которые ActiveRecord может использовать в методе update_attributes.
Есть много известной магии Rails, которую нужно отследить - это поможет?