让 Rails 模型解释表中列以外的值

发布于 2024-11-06 11:38:08 字数 168 浏览 0 评论 0原文

我在模型上使用一系列命名范围来生成查询。在该查询中,有一个与另一个表的连接,其中有一些布尔字段。 当我访问这些列的值时,它返回字符串(“0”和“1”)。

有没有一种干燥的方法来告诉模型如何解释这些列?(我知道我可以编写方法来覆盖访问器,但这感觉不对)。

我正在使用 Rails 2.3.8。

I use a series of named scopes on a model to generate a query.In that query there's a join with another table in which I have some boolean fields.
When I access the values of those columns it returns strings("0" and "1").

Is there a DRY way to tell the model how to interpret those columns?(I know i can write methods to override the accesor, but that doesn't feel right).

I'm using rails 2.3.8.

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

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

发布评论

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

评论(1

提笔落墨 2024-11-13 11:38:08

如果您所说的“覆盖访问器”是指 read_attribute 和 write_attribute 方法,那么这绝对是正确的方法。 Rails 类型自动转换字段,据我所知,没有直接的方法来影响类型转换,只能重写setters/getters

为了完整起见,举个例子:

def admin_user
  read_attribute(:admin_user) == "1" ? true : false
end

def admin_user(v)
  write_attribute(v ? "1" : "0")
end

注意:对于更复杂的情况(比如密码加密),最好的方法是 ActiveRecord Callbacks 。看看那里的例子。

If by "override the accessor" you meant read_attribute and write_attribute methods, then this is absolutely the correct way to do this. Rails type casts fields automatically and AFAIK there is no direct way to influence type casting, only overriding setters/getters.

For integrity's sake, an example:

def admin_user
  read_attribute(:admin_user) == "1" ? true : false
end

def admin_user(v)
  write_attribute(v ? "1" : "0")
end

Note: for more complex cases (say password encryption) the best way would be ActiveRecord Callbacks. Take a look at the examples there.

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