我對軌道上的紅寶石頗爲陌生,但我覺得它很有趣。在一張桌子上的幾個導軌模型參考
無論如何,我正在建立我的模型集,可以這麼說。我有一個模型的地方,這樣產生的:
rails generate scaffold Place name:string description:text type:string
現在,我想使兩兩地之間的路徑模型,持有的距離。我怎麼做到這一點,我只看到如何只引用一個模型到目前爲止。
感謝收聽...
我對軌道上的紅寶石頗爲陌生,但我覺得它很有趣。在一張桌子上的幾個導軌模型參考
無論如何,我正在建立我的模型集,可以這麼說。我有一個模型的地方,這樣產生的:
rails generate scaffold Place name:string description:text type:string
現在,我想使兩兩地之間的路徑模型,持有的距離。我怎麼做到這一點,我只看到如何只引用一個模型到目前爲止。
感謝收聽...
你必須創建一個名爲路由模式,應該是這樣的:
先用腳手架生成
rails g scaffold Route start_place_id:integer end_place_id:integer distance:decimal
運行遷移
然後您必須建立關係。一個地方可以是一個起點或一個終點,因爲 這個關係的標識並不是微不足道的,我們必須指定類和外鍵才能正常工作(在一個簡單的有很多關聯的地方我們可以做has_many:routes和belongs_to的:地方,但事實並非如此) route.rb
class Route<ActiveRecord::Base
belongs_to :start_place, :class_name=>"Place", :foreign_key=>"start_place_id"
belongs_to :end_place, :class_name=>"Place", :foreign_key=>"end_place_id
end
在你place.rb你必須添加
class Place<ActiveRecord::Base
has_many :routes_as_start, :class_name=>"Place", :foreign_key=>"start_place_id"
has_many :routes_as_end, :class_name=>"Place", :foreign_key=>"end_place_id"
end
要建立一個關係,你可以這樣做:
route = @place.routes_as_start.build
route.end_place = Place.create
route.save
這也應該創建一個結束的地方。
謝謝,這幫了我很多。 – 2010-09-29 21:36:35
如果這是解決方案,請點擊此帖子附近的小管,將其選爲正確答案。 – dombesz 2010-09-30 08:31:28
對於Rails的協會我想看看:
http://guides.rubyonrails.org/association_basics.html
此外,距離更是一個地方的屬性。例如,Place.find(1).location = (x,y)
和Place.find(2).location = (x,y)
。然後在您的模型中,您可以編寫一個距離的方法。
def distance(first_place, second_place)
...
end
有一個甜蜜的創業板,在這裏:http://geokit.rubyforge.org/api/geokit-gem/index.html
安裝類型:
sudo gem install geokit
有很多的教程。例如,http://guides.rubyonrails.org/association_basics.html – 2010-09-28 20:35:04