0

我是 Ruby on Rails 的新手,我想创建一个非常简单的网站,我可以在其中保存一些引用。我有几个表:Citation 和 Autor,这里是对应的模型。

class Citation < ActiveRecord::Base
  belongs_to :autor
  attr_accessible :text, :autor_id
end


class Autor < ActiveRecord::Base
  has_many :citations
  attr_accessible :name
end

我希望当用户创建一个新的引文以向新的作者发出新的引用时,必须自动创建该作者。

这是我的 citations_controller 的一部分:

def create
    # Here I check if the autor already exist or not, if not, I create him (The user gave me his name)
    if !(Autor.exists?(:name => params[:citation][:autor_id]))
      Autor.create(:name => params[:citation][:autor_id])
    end

    #As I only have the name of the autor, I try to retrieve his Id
    params[:autor_id] = Autor.where(:name => params[:citation][:autor_id]).first.id

    @citation = Citation.new(params[:citation])

  end

关键是,当我创建一个新引文时,字段 autor_id 填充为 0 而不是正确的作者 ID。我认为错误是当我尝试从名称中检索 Id 时,但我不知道如何修复它,也许有一个更简单的解决方案!

谢谢 !

4

1 回答 1

0

在创建新的 Autor 时将其保存在变量中,然后使用此变量获取 id 您可以将其用作

autor = (temp = Autor.where(:name => params[:citation][:autor_id]).first ? temp : Autor.create(:name => params[:citation][:autor_id])

您还可以使用与上述相同的 rails 的 find_or_create 方法。

之后,如果您想创建引文,您还可以执行以下操作:

autor.citations.create(params[:citation])

这将创建一个带有 autor id 和 params[:citation] 作为其属性的引文

于 2012-11-04T16:46:49.127 回答