我是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时,但我不知道如何解决它,也许有一个更简单的解决方案!
谢谢!
答案 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]作为其属性