0

私は Ruby on Rails を初めて使用します。いくつかの引用を保存できる非常に単純な Web サイトを作成したいと考えています。いくつかのテーブルがあります: 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 が、autor の正しい ID ではなく 0 で埋められることです。名前から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])

上記と同じことを行うレールのfind_or_createメソッドを使用することもできます。

その後、引用を作成したい場合は、次のこともできます。

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

これにより、 autor id と params[:citation] を属性として持つ引用が作成されます

于 2012-11-04T16:46:49.127 に答える