我在Rails 4中有这个代码:
mmkBase = Mmk::Base.find_or_initialize_by(id: id)
mmkBase.update(name: name, city: city, country: country, address: address, region_ids: regionIds, latitude: latitude,
longitude: longitude)
代码工作正常,但现在我需要收集一些统计信息,例如:
基数不是问题。新基数的数量,我想我可以检查mmkBase
返回的对象find_or_initialize
是否带有更多属性,而不仅仅是id,例如带有名称。
但是,我不知道如何检查更新操作是否已运行。
有什么方法可以知道吗?有没有更好的方法来实现这一目标?也许,我应该用更传统的方式来做,先选择一个?
答案 0 :(得分:3)
但是,我不知道如何检查更新操作是否已运行
你可以简单地使用......
if mmkbase.update mkbase_params
...
else
...
这将调用update
方法,根据其是否成功生成响应(true
= success
; false
= validation failure
)
新基数
如上所述,new_record?
方法就是您需要的方法......
if mmkbase.new_record? #-> mmkbase hasn't been saved to db yet
我会这样做:
mmkBase.find_or_create_by(mmkbase_params) do |base|
#do something if new base
end
private
def mmkbase_params
params.require(:mmkbase).permit(:name, :city, :country, :address, :region_ids, :latitude, :longitude)
end
如果你不得不通过主键(find_or_initialize_by id:
)提取这类数据,那你就麻烦了...... 你怎么知道主键是否会保持不变? / em>的
当然,情况并非总是如此。更改user
详细信息需要您引用用户id
- 但数据是严格的。用户注册的IE(name
和email
),您现在正在寻找 用户(无法创建苍蝇)。
我不知道你的架构;可以像这样创建的任何内容都应该由其核心数据(name
,city
等)引用...
mmkbase.find_by(name: ....)
在关系数据库中,您需要处理数据,而不是主键。在其他类型的db中,您可以处理索引,但使用这种类型的设置,使用纯数据会更好。
答案 1 :(得分:-3)
您可以检查对象上的updated_at
时间戳,看它是否最近更新过,但Rails 4更新方法并不能告诉您对象是否已更新。