Rails 4 - Как использовать Update_all с этим хэшем params?
У меня есть модель под названием Row:
# == Schema Information
#
# Table name: rows
#
# id :integer not null, primary key
# created_at :datetime
# updated_at :datetime
# numCols :integer
# type :string(255)
# content :text
# status :string(255)
# doc_id :integer
#
class Row < ActiveRecord::Base
belongs_to :doc, :foreign_key => "doc_id", :class_name => "Doc"
=begin
Status of a row can be:
1) header
2) body
3) ignore
=end
Вот некоторые подходящие методы из моего row_controller:
def update_multiple
puts "update multiple"
puts "#{row_params.inspect}"
#How to use Update ALL
#Row.update_all(row_params[:rows])
redirect_to docs_path
end
def row_params
#params[:row]
params.permit(:row, :rows =>[:id, :status, :content])
end
Row_params, отправленные из формы в метод update_multiple, выглядят так:
Parameters: {"utf8"=>"✓", "authenticity_token"=>"72nyykQ3uOL+VSicBk99HOtyCDpqDe4FaLzOa6EILYI=", "commit"=>"Update Row Classification",
"rows"=>{"1"=>{"id"=>"1", "status"=>"ignore", "content"=>"[PROGRAMS] (All Locations|Consolidated),,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"},
"2"=>{"id"=>"2", "status"=>"header", "content"=>",,,,,,,,Stats >>,Rtg%,,,,,,,,,,,,,,,Shr% [Total TV Eng],,,,,,,,,,,,,,,#Stations,,,,,,,,,,,,,,"},
"3"=>{"id"=>"3", "status"=>"header", "content"=>"Areas,Program,Channel,Date,Weekday,Start time,End time,Duration,Episode Name,Ind.2+,A18+,A25-54,A18-49,A18-34,A55+,F25-54,F18-49,F18-34,M25-54,M18-49,M18-34,A12-34,T12-17,C2-11,Ind.2+,A18+,A25-54,A18-49,A18-34,A55+,F25-54,F18-49,F18-34,M25-54,M18-49,M18-34,A12-34,T12-17,C2-11,Ind.2+,A18+,A25-54,A18-49,A18-34,A55+,F25-54,F18-49,F18-34,M25-54,M18-49,M18-34,A12-34,T12-17,C2-11"},
....
Я хочу обновить все строки, включенные в параметры, значениями, отправленными в методе update_multiple, показанном выше
Как мне это сделать? Я не совсем понимаю
Большое спасибо за вашу помощь.
1 ответ
Как вы можете видеть из документов, вам нужно указать, какие строки вы хотите обновить, а затем внедрить его с теми же данными (или вычислениями, как number = number + 1
где число является собственностью). Но в вашем случае значения отличаются, поэтому вы должны найти строки и отдельно установить значения.
В твоем случае у тебя это должно быть вроде:
rows = Row.find(row_params[:rows].map { |r| r[:id] })
rows.each { |r| r.update(row_params[:rows]) }