在Rails中使用具有嵌套资源的不同外键

时间:2014-08-01 19:12:24

标签: sql ruby-on-rails rails-activerecord nested-resources

在Rails中使用嵌套资源时,是否可以使用父资源的主键以外的值/字段作为子资源对象的外键?

e.g。如果我有“作者”的“书籍”,我会在app / db / migrate / [timestamp] _create_books.rb中使用t.references :author, index: true创建“作者”的主键。 ?)。

是否可以传递作者的姓名? (假设“authors”表有一个“name”字段......)

我问,因为我有一个预先存在的各种领域的书籍(作者,标题,主题,年份等),并且创建一个 authors 表与来自的独特作者似乎更简单。 books 表,然后将其加入authors.name=books.author,而不必找出一种方法,让 authors 中的唯一主键与中的正确作者相关联EM>书。 (但我可能完全错了。)(无论如何,我很好奇是否可以完成和/或引入缺少作者书的预先存在的数据库的正确方法协会将是。)

(如果我的术语关闭,我道歉。)

1 个答案:

答案 0 :(得分:1)

所以,你的模特:

class Author < ActiveRecord::Base
  has_many :books
end

class Book < ActiveRecord::Base
  belongs_to :author, primary_key: "name", foreign_key: "author_name"
end

它应该工作。但是这种方式打破了Rails的一个基石:“约定优于配置”,这就是为什么有一天你有机会在你的数据库中完全混乱。

除了'name'Author模型之外还有哪些其他属性?如果它们很少(或者甚至只有一个 - '名称'),那么只有一个具有属性“author”的模型“Book”会更好更容易。