在模型中设置属性

发布于 2024-10-16 04:31:36 字数 253 浏览 0 评论 0原文

所以我有一个应用程序,它只需要一些 RSS 提要并将它们存储在表中。它检查每个条目中的一些条件,然后根据条件设置属性。

if self.value1 > self.value2 then
    :status => 'foo'
else
    :status => 'bar'
end

我对 Ruby/Rails 还是有点菜鸟,设置状态会导致异常,但我不知道为什么。

任何帮助都会很棒。

So I've got an application which simply takes a number of RSS feeds and stores them in a table. It checks a couple of things in each entry for conditions and then sets an attribute based on the condition.

if self.value1 > self.value2 then
    :status => 'foo'
else
    :status => 'bar'
end

I'm still a bit of a noob with Ruby/Rails and setting the status is causing an exception but I don't know why.

Any help would be great.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

走过海棠暮 2024-10-23 04:31:36

当您说“设置属性”时,我假设您的意思是这是表上的另一列。如果是这样,这应该可行:

if self.value1 > self.value2
    update_attribute :status, "foo"
else
    update_attribute :status, "bar"
end

在实例化对象或更新多个属性时(self.update_attributes :动物=>“小猫”,:声音=>“咆哮!”)。这是 Hash 使用的表示法。

您也可以只使用 status = "foo",但这会设置属性而不保存,因此您还必须调用 self.saveupdate_attribute 在一个简洁的包中完成这两项任务。

When you say "sets an attribute", I assume that you mean this is another column on the table. If so, this should work:

if self.value1 > self.value2
    update_attribute :status, "foo"
else
    update_attribute :status, "bar"
end

The "rocket" notation (:this => "that") is used when instantiating an object, or when updating more than one attribute (self.update_attributes :animal => "kitten", :sound => "Roar!"). It's the notation that a Hash uses.

You could also just use status = "foo", but that will set the attribute without saving, so you'd also have to call self.save. update_attribute does both in one neat package.

记忆消瘦 2024-10-23 04:31:36

在 Rails 4 中,我使用了以下方法:

def update_test
  if self.value1 > self.value2
      self.status="foo"
  else
      self.status= "bar"
  end
end

并在模型中添加了 before_update 过滤器。

before_update :update_test, :if => :test_changed?

在此方法中,我们不需要调用 save 或 update_attributes,这将在单个查询中完成。

In Rails 4 I have done with the following method:

def update_test
  if self.value1 > self.value2
      self.status="foo"
  else
      self.status= "bar"
  end
end

and added before_update filter in model.

before_update :update_test, :if => :test_changed?

In this method we don't need to call the save or update_attributes this will be done in a single query.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文