使用Ruby 2.0和Rails 4.0.2 我有2张桌子。一个表在第二个表的_form视图中填充选择列表集合。 我需要从选择列表中获取用户选择的结果,并将该名称值输入到另一个表字段中,而不是选择的ID,而是实际的单词。我想在没有联接表的情况下这样做。
我一直在尝试使用书籍和作者,并观看Ryan Bate的视频,但没有详细解释如何解决上述问题。我最困惑。如果我能理解这个过程,我可以在应用程序中重新创建它。
Author
has_many :books
accepts_nested_attributes_for :books, :reject_if => lambda { |a| a[:bookname].blank? }, :allow_destroy => true
Book
belongs_to :author
书籍控制器示例: def new @book = Book.new @author = Author.find(params [:author_id]) @book = @ author.books.build
def create
@author = Author.find(params[:author_id])
Book _form.html.erb
<div class="tryit">
<%= f.collection_select(:author, :author_id, @authors; :id, :name) %>
</p>
</div>
从这里我被困住了。不明白如何将作者姓名带入Book表的authorname字段。我不想使用连接表,只需用正确的数据填充书表。
有人可以请一些建议 感谢
答案 0 :(得分:0)
您不需要作者姓名
ActiveRecord Associations的目的是为relational database互动提供框架。基本上,这些表格使用primary_key
(唯一标识符 - 典型的id
)和foreign_key
(另一个表中的primary key
)
因为Rails是关系和面向对象的,所以它允许你这样做:
@book.author.name
外键
当您使用ActiveRecord时,它会像这样填充您的表:
authors
id | name | etc | etc | created_at | updated_at
books
id | author_id | title | ISBN | etc | created_at | updated_at
这意味着您不需要使用除books
的{{1}}以外的任何数据来填充从属foreign_key
表。这将允许Rails在您调用author
对象
author
属性
<强>代表强>
解决此问题的一种方法(如果您希望直接从book
对象book
委托`] 3方法访问所有作者信息:
) is to use the [
这样您就可以拨打#app/models/book.rb
Class Book < ActiveRecord::Base
belongs_to :author
delegate :name, to: :author, prefix: true
end