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

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

你可以试试这个:

 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

你使用find_or_create错了。 它需要标识符和哈希:

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

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