Ruby on rails 添加到rails中的多个表

Ruby on rails 添加到rails中的多个表,ruby-on-rails,ruby,Ruby On Rails,Ruby,我确信这是一个相对简单的问题,必须有一个好的、明智的rails方法来解决,但我不确定它是什么 基本上,我是在向数据库中添加书籍,我想将作者存储在一个单独的表中。所以我有一个名为authors的表,它被表书引用 我想创建一个rails表单来添加一本书,我希望它只是作者、标题、出版商等的一个简单表单,如果它发现作者已经在authors表中,那么它应该只引用该记录,如果它不在authors表中,那么它应该添加一条新记录并引用它 我确信在rails中有一种简单的方法可以做到这一点,但我似乎找不到 干杯

我确信这是一个相对简单的问题,必须有一个好的、明智的rails方法来解决,但我不确定它是什么

基本上,我是在向数据库中添加书籍,我想将作者存储在一个单独的表中。所以我有一个名为authors的表,它被表书引用

我想创建一个rails表单来添加一本书,我希望它只是作者、标题、出版商等的一个简单表单,如果它发现作者已经在authors表中,那么它应该只引用该记录,如果它不在authors表中,那么它应该添加一条新记录并引用它

我确信在rails中有一种简单的方法可以做到这一点,但我似乎找不到

干杯


Robin

假设您的表单传递了一个作者姓名和一个带有图书属性的图书哈希,您可以在控制器中执行以下操作:

@author = Author.find_or_create_by_name(params[:author_name])
@book = Book.new(params[:book])
@book.author = @author
@book.save
这将找到一个同名的作者,或者创建一个,然后将该作者指定给所创建的书


注意:这也假设作者可以通过他们的名字来唯一地识别,但通常情况并非如此。比如说,可能有多个名字叫“史蒂文·金”的家伙,其中只有一个写了《闪亮》

我建议你看一下《铁路乘客》的《复杂表单》系列。

罗宾特对迈卡回答的评论:

这看起来是一个很好的方法——尽管在某些方面我很惊讶Rails并没有自动完成这项工作

四行!Rails能自动完成多少工作?这是一个框架,不是人。:)

这里有两个:

@author = Author.find_or_create_by_name(params[:author_name])
@book = Book.create params[:book].merge({:author_id => @author.id})
Honza的回答有很多优点:

class Book < ActiveRecord::Base
  ...
  def author_name=(author_name)
    self.author = Author.find_or_create_by_name author_name
  end
end

Wowzers.

这最终将是自动的(根据Rails 2.2中的这篇文章):

感谢您的快速回复!这看起来是一个很好的方法——尽管在某些方面我很惊讶Rails并没有自动完成这项工作。
@book = Book.create params[:book]