0

假设我有一个用户模型,我想用类方法生成一个用户。

我曾经做过这样的事情:

def self.generate_user(params)
  user = user.new
  # Some work on the user model
  user.save ? user : nil
end

有了这个,我可以知道用户是否很容易创建,但是,我无法访问它的错误消息。

所以我正在考虑这两个选项:

选项一,退货状态和型号

def self.generate_user(params)
  user = user.new
  # Some work on the user model
  return user.save, user
end

然后我必须以这种方式得到结果:ret, user = User.generate_user(params)

选项2,仅返回用户,检查valid?

def self.generate_user(params)
  user = user.new
  # Some work on the user model
  user
end

然后 :

user = User.generate_user(params)
if user.valid?
  # Do stuff
end

你更喜欢哪个选项?你还有别的吗?也许使用异常?

4

2 回答 2

1

例外,绝对。更像 Ruby,如果使用create!,ActiveRecord 会抛出异常!它失败了:

def self.generate_user(params)
  User.create! do |u|
    # Do some stuf wth user
  end
end

begin
  user = User.generate_user(params)
rescue ActiveRecord::RecordInvalid => e
  # Find errors here : e.record.errors
  # Something on rescue
end
于 2013-03-14T10:11:44.283 回答
0

我会尝试:

def self.generate_user(params)
  user = User.create do |u|
    # Do some stuff with user
  end
  user
end

进而:

user = User.generate_user(params)
if user.valid? # or user.persisted?
  # alright
end
于 2013-03-14T10:05:35.937 回答