我对轨道上的红宝石颇为陌生,但我觉得它很有趣。在一张桌子上的几个导轨模型参考
无论如何,我正在建立我的模型集,可以这么说。我有一个模型的地方,这样产生的:
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