在Rails中使用嵌套资源时,是否可以使用父资源的主键以外的值/字段作为子资源对象的外键?
e.g。如果我有“作者”的“书籍”,我会在app / db / migrate / [timestamp] _create_books.rb中使用t.references :author, index: true
创建“作者”的主键。 ?)。
是否可以传递作者的姓名? (假设“authors”表有一个“name”字段......)
我问,因为我有一个预先存在的各种领域的书籍(作者,标题,主题,年份等),并且创建一个 authors 表与来自的独特作者似乎更简单。 books 表,然后将其加入authors.name=books.author
,而不必找出一种方法,让 authors 中的唯一主键与
(如果我的术语关闭,我道歉。)
答案 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
”会更好更容易。