3

first_or_create で検索と作成を区別したい。

record = MasterRecord.where(:name=>'test_data').firest_or_create

# and i want differentiate searched or created like this.
# but there is no created_record? method
if record.created_record?
    render :status=>200, :json => record.to_json
else
    render :status=>409, :json => record.to_json
end

どうすればいいですか?

4

2 に答える 2

5

回避策は、first_or_initialize代わりfirst_or_createに を使用してからnew_record?、次のように使用することです。

record = MasterRecord.where(:name=>'test_data').first_or_initialize

created_record = record.new_record?
record.save! if record.new_record?

if created_record
    render :status=>200, :json => record.to_json
else
    render :status=>409, :json => record.to_json
end
于 2013-01-09T13:42:52.820 に答える
3

レコードが見つからない場合は、リターンが返されるので[]、で遊ぶことができますtap。このようなもの:

created = false
record = MasterRecord.where(:name=>'test_data').tap {|x| created = true if x.empty?}.first_or_create
if created
  ...
于 2013-01-09T13:38:36.027 に答える