Rails依赖于对非关联对象的破坏

时间:2016-11-01 08:13:01

标签: mysql ruby-on-rails associations destroy

我有两张桌子。 '文章'和'书签'。我想定义它们之间的关联。

文章表中有'doi'列,用于书签表。

文章:

| doi| varchar(255) | YES  | MUL | NULL |

书签:

+-----------------+--------------+------+-----+---------+----------------+
| Field           | Type         | Null | Key | Default | Extra          |
+-----------------+--------------+------+-----+---------+----------------+
| id              | int(11)      | NO   | PRI | NULL    | auto_increment |
| user_profile_id | int(11)      | NO   | MUL | NULL    |                |
| device_id       | int(11)      | NO   | MUL | NULL    |                |
| article_doi     | text         | NO   |     | NULL    |                |
| disabled_at     | varchar(255) | YES  |     | NULL    |                |
| created_at      | datetime     | YES  |     | NULL    |                |
| updated_at      | datetime     | YES  |     | NULL    |                |
+-----------------+--------------+------+-----+---------+----------------+

由于某些原因,我无法使用文章的ID来引用书签表中的文章。现在,我想在article_doi列中删除具有该特定文章的doi的所有书签(删除文章时删除所有书签)。我怎样才能做到这一点?

是否有必要在文章表'doi'和书签表'article_doi'中使用相同的名称作为外键?

enter image description here

2 个答案:

答案 0 :(得分:0)

我认为你只需要使用“foreign_key”选项

class Article < ActiveRecord::Base
  has_many :bookmarks, dependent: :destroy, foreign_key: :article_doi
end

class Bookmark < ActiveRecord::Base
  belongs_to :article, foreign_key: :article_doi
end

来源:http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

答案 1 :(得分:0)

class Article
  has_many :bookmarks, class_name: BookMarks, foreign_key: "article_doi", dependent: :destroy
end

class BookMark
  belongs_to :article, class_name: Article, foreign_key: "article_doi"
end