0

従業員と会社の2つのモデルクラスがあります。従業員IDのみが外部ライブラリによって生成されます。従業員の詳細がすでに存在する場合は更新しようとしています。そうでない場合は、新しい従業員の詳細を作成する必要があります。以下は、createメソッドのコードです。

def create

 if !@emp= Details.find_or_create_by_emp_id(params[:details][:emp_id])
    @emp = Details.new(params[:details])

  // some logic goes here 


  else
    @emp.update_attributes(params[:details])
    render action: "show"
  end      
end

ただし、これにより、特定のemp_idに関連するテーブル行を更新するのではなく、常に既存のemp_idで新しいレコードが作成されます。それを機能させる方法は?

4

2 に答える 2

1

あなたはこれを試すことができます:

def create
  @emp = Details.find_by_emp_id(params[:details][:emp_id])

  if @emp
    @emp.update_attributes(params[:details])
    render action: "show"
  else
    @emp = Details.new(params[:details])
    //other stuff
  end
end

したがって、従業員がすでに存在する場合は@empに設定され、そうでない場合は@empがnilに設定されます。

于 2012-08-17T21:01:25.927 に答える
0

find_or_createを間違って使用しています。識別子とハッシュの両方を取ります。

 if Detail.find_or_create_by_emp_id(params[:detail][:emp_id], params[:detail])
   #success
 else
   #fail
 end

注:モデル名とパラメーターの両方が複数形のようです。これは慣例に反しますが、それが意図したものであると確信していますか?

于 2012-08-17T22:37:18.657 に答える