Rails - 如何仅在一个方向上关联模型

时间:2012-07-12 17:35:55

标签: ruby-on-rails associations models

啊,伙计们,

我是Rails的新手,我觉得我肯定错过了一些关键的东西,因为看起来这应该是一个容易解决的问题。

我已经设置了Page模型和Coord模型(在入门教程的帮助下),Coord成功belongs_to Page 。我正在尝试应用类似的逻辑来制作另一个模型Comment,属于Coord,并且只能通过Page属于Coord

我是否将:through用于(我认为)只需要在一个方向上链接的关联?如Page< Coord<评论? 目前我有:

class Page < ActiveRecord::Base
  attr_accessible :description, :name
  has_many :coords
  has_many :comments, :through => :coords
end

Coord模特:

class Coord < ActiveRecord::Base
  belongs_to :page
  has_many :comments
  attr_accessible :coordinates, :x, :y
  validates :x, :presence => true
  validates :y, :presence => true
end

然后评论模型:

class Comment < ActiveRecord::Base
  belongs_to :coord
  belongs_to :page
  attr_accessible :body
end

我仍然不断收到有关comments未定义方法或未定义关联的错误。如果这是一个常见的问题,我不会道歉,我个人并不认识任何知道Rails的人,而且文档中只有远离我的例子(据我所知)。感谢

修改:添加了数据库架构

ActiveRecord::Schema.define(:version => 20120712170243) do

  create_table "comments", :force => true do |t|
    t.text     "body"
    t.integer  "coord_id"
    t.integer  "page_id"
    t.datetime "created_at", :null => false
    t.datetime "updated_at", :null => false
  end

  add_index "comments", ["coord_id"], :name => "index_comments_on_coord_id"
  add_index "comments", ["page_id"], :name => "index_comments_on_page_id"

  create_table "coords", :force => true do |t|
    t.string   "coordinates"
    t.integer  "x"
    t.integer  "y"
    t.integer  "page_id"
    t.datetime "created_at",  :null => false
    t.datetime "updated_at",  :null => false
  end

  add_index "coords", ["page_id"], :name => "index_coords_on_page_id"

  create_table "pages", :force => true do |t|
    t.string   "name"
    t.string   "description"
    t.datetime "created_at",  :null => false
    t.datetime "updated_at",  :null => false
  end

end

1 个答案:

答案 0 :(得分:1)

网页

class Page < ActiveRecord::Base
  has_many :coords
  has_many :comments, :through => :coords
end

<强>坐标

class Coord < ActiveRecord::Base
  belongs_to :page
  has_many :comments
end

<强>注释

class Comment < ActiveRecord::Base
  belongs_to :coord
  has_one :page, :through => :coord
end

使用上述内容,page_id表格中不需要comments

参考: A Guide to Active Record Associations