【问题标题】:Rails dependent destroy on non associated objectsRails 依赖于非关联对象的破坏
【发布时间】:2017-03-14 08:49:50
【问题描述】:

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

文章表有'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'中是否必须具有相同的名称才能用作外键?

【问题讨论】:

    标签: mysql ruby-on-rails associations destroy


    【解决方案1】:

    我认为你只需要使用“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

    【讨论】:

    • 有没有办法我也可以在迁移文件中强制执行此操作?
    • 在 article.rb 中,has_many :bookmarks,class_name:'Bookmark',foreign_key:'article_doi',依赖::destroy。在bookmark.rb 中,belongs_to :article,class_name:'Article',foreign_key:'article_doi'。当我执行“article.bookmarks”或“bookmark.article”时,这总是返回零。为什么?
    【解决方案2】:
    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-05
      • 2015-11-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多