如果存在基于记录id以外的属性的特定记录,如何创建新记录或更新,Ruby on Rails?

时间:2012-08-17 20:26:29

标签: ruby-on-rails ruby-on-rails-3 activerecord

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

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相关的表行。如何使它工作?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您使用的是find_or_create错误。它需要标识符和哈希:

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

注意:您的模型名称和参数似乎都是复数,这违反惯例,您确定这是您的意图吗?