如何解决 Rails 模型属性和 gem 名称冲突?

Posted

技术标签:

【中文标题】如何解决 Rails 模型属性和 gem 名称冲突?【英文标题】:How to resolve a rails model attribute and gem name conflict? 【发布时间】:2012-03-29 07:39:00 【问题描述】:

在 Rails 3.2.1 上。我有一个名为Car 的模型,其属性名为rate(表示价格数量)。我正在使用ajaxful_rating gem,它将一个名为rate 的方法与Car 关联起来(提交对老师的评价)。

所以在我看来,当我试图显示价格数量时:

<%= @car.rate %>

我收到语法错误,因为存在命名混淆。如何让 Rails 知道我想调用 rate 属性而不是 rate 方法?有没有一种简单的方法来解决这个问题而无需回滚我的数据库并重命名属性?

【问题讨论】:

【参考方案1】:

嗯,首先,您不必回滚数据库来重命名属性。您只需使用以下更改创建一个新迁移:How can I rename a database column in a Ruby on Rails migration? 这些类型的更改有时是必要的,因此 Rails 具有处理它们的机制。

但要回答您的问题,另一种解决方法是在 car 上编写一个新方法,该方法实际上可以访问如下属性:

def rate_price read_attribute(:rate) 结尾

【讨论】:

感谢您的建议和迁移文章链接!由于对 Rails 相当陌生,我看到了另一位发帖人关于让自己在路上感到困惑的观点,尽管必须这样做会稍微影响我的 rspec 测试。 您的语法不正确,read_attribute 是带参数的方法,而不是数组。【参考方案2】:

你可以使用read_attribute:

@car.read_attribute(:rate)

但我建议您通过重命名其中一个来解决冲突,因为这只会给您带来麻烦和混乱。

您无需回滚数据库即可重命名列,只需 create a new migration 即可。

【讨论】:

谢谢,我对 Rails 还很陌生,所以我认为你对混淆部分是正确的......有趣的是,我从来不知道 read_attribute()。

以上是关于如何解决 Rails 模型属性和 gem 名称冲突?的主要内容,如果未能解决你的问题,请参考以下文章

使用带有 Rails 的改革 gem,我如何填充 has_many :通过嵌套模型

如何生成属性名称,并在 Rails 模型中获取它们的值

Rails 少/sass 冲突

如何从rails中删除设计模型?

用其他gems rails调用ruby脚本

如何使用Rails中的Mobility gem以一种形式实现所有翻译? [关闭]