如何通过rails中的关联获取详细信息?

时间:2016-08-15 09:40:47

标签: ruby-on-rails associations rails-activerecord

我有四种型号的导轨;位置,路径,功能和要素类型。但我正在努力建立一些协会。

  • 功能有一个位置和一个功能类型
  • 路径有2个位置,从和到

从功能我可以运行

  • Feature.first.location - 并获取它适用的位置
  • Feature.featuretype - 并获取与其相关的要素类型。

从Featuretype我可以运行

  • Featuretype.first.features - 并返回使用此功能类型的所有功能。

从位置我可以运行

  • Location.first.features - 它会返回链接到此位置的所有功能。

我希望能够运行

  • Location.first.paths - 并返回使用该位置的所有路径。
  • Path.first.locations - 并返回路径中的两个位置。

任何帮助都将不胜感激。

class Location < ActiveRecord::Base
    has_many :features
end

class Path < ActiveRecord::Base
    belongs_to :LocationFrom, class_name: 'Location', foreign_key: 'from'
    belongs_to :LocationTo, class_name: 'Location', foreign_key: 'to'
end

class Feature < ActiveRecord::Base
    belongs_to :featuretype
    belongs_to :location
end

class Featuretype < ActiveRecord::Base
    has_many :feature 
end

如果有帮助,这是我的数据库架构

ActiveRecord::Schema.define(version: 20160813164514) do

  create_table "features", force: :cascade do |t|
    t.integer  "featuretype_id"
    t.string   "featurename"
    t.string   "featuredescription"
    t.datetime "created_at",         null: false
    t.datetime "updated_at",         null: false
    t.integer  "location_id"
  end

  create_table "featuretypes", force: :cascade do |t|
    t.string   "name"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

  create_table "locations", force: :cascade do |t|
    t.string   "name"
    t.text     "description"
    t.string   "latitude"
    t.string   "longitude"
    t.datetime "created_at",  null: false
    t.datetime "updated_at",  null: false
  end

  create_table "paths", force: :cascade do |t|
    t.integer  "from"
    t.integer  "to"
    t.integer  "distance"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.boolean  "directed"
  end

end

1 个答案:

答案 0 :(得分:1)

class Featuretype < ActiveRecord::Base
  has_many :feature # Should be :features, (notice the pluralization)
end

重命名关系。命名约定是蛇案例。

class Path < ActiveRecord::Base
  belongs_to :location_from, class_name: 'Location', foreign_key: 'from'
  belongs_to :location_to, class_name: 'Location', foreign_key: 'to'
end

Location中创建一个查询Path所需行

的方法
def paths
  Path.where "from = :id OR to = :id", id: id
end

Path中创建一个方法,将两个位置作为数组返回

def locations
  [location_from, location_to]
end
相关问题