如何从Ruby中存储在数据库中的对象中获取id?

时间:2012-11-04 16:36:50

标签: ruby-on-rails ruby activerecord controller

我是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

我希望当用户创建一个与新autor相反的新引文时,必须自动创建autor。

以下是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并且没有正确的autor ID。我认为错误是当我尝试从名称中检索Id时,但我不知道如何解决它,也许有一个更简单的解决方案!

谢谢!

1 个答案:

答案 0 :(得分: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]作为其属性