2012-11-04 57 views
0

我是Ruby on Rails的新手,我想創建一個非常簡單的網站,我可以保存一些引文。 我有幾個表:Citation和Autor,這裏是相應的模型。如何從存儲在Ruby數據庫中的對象獲取id?

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時,但我不知道如何解決它,也許有一個更簡單的解決方案!

謝謝!

回答

0

,同時創造了新的作者日期保存它的變量,然後使用這個變量獲得ID 您可以使用此作爲

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

你也可以使用軌道find_or_create方法,它確實與上述相同。

,如果你想創建一個引用您也可以在該做的事:

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

這將創建與作者日期編號,而params引文[:引證]作爲其屬性

+0

我認爲方法存在?()只返回一個布爾值......你確定寫「temp = Autor.exists?(...)」是正確的嗎? – n0n0bstan

+0

嘿,我很抱歉它應該在哪裏而不是存在? 現在它可以完美運行 –

+0

我得到了一些像「被調用的id爲零,這將錯誤地爲4 - 如果你真的想要nil的id,使用object_id」,你知道它來自哪裏嗎? – n0n0bstan

相關問題