0

ユーザーモデルがあり、クラスメソッドを使用してユーザーを生成するとします。

私はこのようなことをしていました:

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

これにより、ユーザーが作成されたかどうかはわかりますが、エラーメッセージにアクセスできません。

だから私はこれらの2つのオプションを検討しています:

オプション1、ステータスとモデルを返す

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 に答える