加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails:我如何在我的模型中调用`self.save`,并

发布时间:2020-12-16 21:45:57 所属栏目:百科 来源:网络整理
导读:我试图将模型逻辑保留在我的模型中,但是我不能让它对自己进行修改,并且使它们保留在数据库中. 在我的控制器: @article.perform_some_calulcations! 在我的模型中: def perform_some_calculations! self.foo.gsub!(/regexp/,'string') self.saveend 如果我
我试图将模型逻辑保留在我的模型中,但是我不能让它对自己进行修改,并且使它们保留在数据库中.

在我的控制器:

@article.perform_some_calulcations!

在我的模型中:

def perform_some_calculations!
  self.foo.gsub!(/regexp/,'string')
  self.save
end

如果我将调试器语句放在我的方法中,并且在控制器中调用它之后,@ article.foo具有正确的值.但是,当我继续,它不会保留在数据库中,而且webrick不会报告任何UPDATE语句.

怎么了?我不知道我以前是否曾经做过这样的事情,但肯定是可能的吗?

解决方法

你的问题是,如果你修改一个属性“就地”,这意味着:没有给它一个新的值,那么Rails会认为没有什么新的可以被保存,所以它“优化”保存.

您的属性的每个写访问器将设置一个标志,所以保存方法将知道它应该检查当前值是否真的不同于从数据库读取的值.
这就是为什么self.foo = self.foo.gsub(/ regexp /,’string’)的工作原理(注意,感叹号在这里是不必要的).

如果您需要修改属性“就地”,例如使用gsub!或更换,使用:

def perform_some_calculations!
  foo_will_change!
  self.foo.gsub!(/regexp/,'string')
  self.save
end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读