0

我有 2 个模型班,员工和公司。外部库仅生成员工 ID。如果他的详细信息已经存在,我正在尝试更新员工详细信息,否则我需要创建新的员工详细信息。以下是创建方法的代码:

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 回答