如何从列表中选择结果并将其放入另一个表字段中

时间:2014-01-18 07:35:49

标签: ruby-on-rails collections

使用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字段。我不想使用连接表,只需用正确的数据填充书表。

有人可以请一些建议 感谢

1 个答案:

答案 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