1

我有一个名为 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

我的 rows_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

从表单发送到 update_multiple 方法的 row_params 如下所示:

   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 方法中发送的值更新参数中包含的所有行

我该怎么做呢?我很困惑

非常感谢你的帮助。

4

1 回答 1

0

正如您从文档中看到的那样,您需要指定要更新的行,然后使用相同的数据(或类似的计算number = number + 1,其中数字是属性)来实现它。但在你的情况下,值是不同的,所以你应该找到行并单独设置值。

在你的情况下,你应该是这样的:

rows = Row.find(row_params[:rows].map { |r| r[:id] })
rows.each { |r| r.update(row_params[:rows]) }
于 2014-07-14T19:48:48.167 回答