0
如果我有一個名爲Page
模型,該模型的has_many線和Page
接受嵌套屬性爲Page
,如果我做在Rails中按順序創建嵌套資源?
Page.create({"lines_attributes" : [{"foo1": "bar1"}, {"foo2": "bar2"}]})
有什麼辦法,以確保線路
{"foo1": "bar1"}
將是前
{"foo2": "bar2"}
如果我有一個名爲Page
模型,該模型的has_many線和Page
接受嵌套屬性爲Page
,如果我做在Rails中按順序創建嵌套資源?
Page.create({"lines_attributes" : [{"foo1": "bar1"}, {"foo2": "bar2"}]})
有什麼辦法,以確保線路
{"foo1": "bar1"}
將是前
{"foo2": "bar2"}
他們已經插在正確的順序,但數據庫無法插入的Guara當您選擇它時,請選擇正確的順序。您需要在您的Page模型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
如果不是,它有關係嗎?看來你應該有一些其他的數據來說明行的順序,而不是依賴於記錄的插入。 – CWitty