Rails:before_save,创建或更新记录并返回false?

时间:2011-11-02 04:25:35

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

拥有包含1个字段,电子邮件地址的表单。

  1. 提交模型时调用:before_save
  2. 检查电子邮件地址是否存在。
    1. 如果是,则会创建新记录。
    2. 如果没有,则更新另一个模型中的记录,并且不应创建任何记录。
  3. 使用return false取消before_save for 2.2,但它会回滚更新并取消创建,我只希望不创建记录。

    我是在正确的道路上吗?还有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

很奇怪你有用户A的对象,但更新用户B的行......

也许您可以先在控制器中找到正确的用户对象:

@user = User.find_by_email(params[:email]) || User.new(params[:email])
如果找不到相应的对象,

User.find_by_xxx将返回nil(如果匹配了两个或更多对象,则返回第一个对象)。

答案 1 :(得分:0)

你可以自己创建自己的before_save方法并调用它而不是object.save

例如

def custom_save
  if email_address_exists? # this would be a method you create
    self.save
  else
    # update record in other model
  end
end

然后在你的控制器中使用它而不是save(即model.custom_save)

相关问题