Rails 4如何知道更新是否已执行

时间:2015-11-11 07:51:27

标签: ruby-on-rails

我在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,例如带有名称。 但是,我不知道如何检查更新操作是否已运行。

有什么方法可以知道吗?有没有更好的方法来实现这一目标?也许,我应该用更传统的方式来做,先选择一个?

2 个答案:

答案 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(nameemail),您现在正在寻找 用户(无法创建苍蝇)。

我不知道你的架构;可以像这样创建的任何内容都应该由其核心数据(namecity等)引用...

mmkbase.find_by(name: ....)

在关系数据库中,您需要处理数据,而不是主键。在其他类型的db中,您可以处理索引,但使用这种类型的设置,使用纯数据会更好。

答案 1 :(得分:-3)

您可以检查对象上的updated_at时间戳,看它是否最近更新过,但Rails 4更新方法并不能告诉您对象是否已更新。

definition of primitive recursive