【问题标题】:how to differentiate searched or created by first_or_create如何区分 first_or_create 搜索或创建
【发布时间】:2013-01-09 13:09:32
【问题描述】:

我想区分由 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

我该怎么做?

【问题讨论】:

    标签: ruby activerecord ruby-on-rails-3.2


    【解决方案1】:

    一种解决方法是使用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
    

    【讨论】:

    • 真棒拯救了我的一天!
    【解决方案2】:

    如果找不到记录,则返回[],因此您可以使用tap。 像这样的:

    created = false
    record = MasterRecord.where(:name=>'test_data').tap {|x| created = true if x.empty?}.first_or_create
    if created
      ...
    

    【讨论】:

    • 我不知道点击。我搜索了水龙头,我知道它非常好。谢谢。
    猜你喜欢
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多