如果我有一个名为Page
的模型,其中包含__多行,Page
接受Page
的嵌套属性,如果我这样做
Page.create({"lines_attributes" : [{"foo1": "bar1"}, {"foo2": "bar2"}]})
有没有办法确保该行
{"foo1": "bar1"}
将在
之前插入{"foo2": "bar2"}
答案 0 :(得分:1)
它们已按正确顺序插入,但数据库在您选择时无法保证正确的顺序。您需要在页面模型position
中添加另一个属性,以便根据需要对数据进行排序。最简单的方法是使用acts_as_list
- gem:
https://github.com/swanandp/acts_as_list
示例:
> rails generate scaffold Page page_number:integer
> rails generate scaffold Line content position:integer page_id:integer
应用/模型/ page.rb 强>
class Page < ActiveRecord::Base
has_many :lines, -> { order("position ASC") }
accepts_nested_attributes_for :lines
end
应用/模型/ line.rb 强>
class Line < ActiveRecord::Base
belongs_to :page
acts_as_list scope: :page
end
将acts_as_list
添加到您的Gemfile中。
2.1.0 :001 > Page.create({lines_attributes:[{content: "bar1"}, {content: "bar2"}]})
2.1.0 :002 > puts Page.last.lines.to_yaml
---
- !ruby/object:Line
attributes:
id: 5
content: bar1
position: 1
page_id: 6
created_at: 2014-07-11 09:38:56.800269000 Z
updated_at: 2014-07-11 09:38:56.800269000 Z
- !ruby/object:Line
attributes:
id: 6
content: bar2
position: 2
page_id: 6
created_at: 2014-07-11 09:38:56.807034000 Z
updated_at: 2014-07-11 09:38:56.807034000 Z
=> nil