关于ruby:如何解决rails模型属性和gem名称冲突?

How to resolve a rails model attribute and gem name conflict?

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

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

1
<%= @car.rate %>

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


您可以使用read_attribute

1
@car.read_attribute(:rate)

但我建议您通过重命名其中一个来解决冲突,因为它只会引起您的问题和混乱。

您不需要回滚数据库来重命名列,只需创建一个新的迁移即可。


好吧,首先,您不必回滚数据库来重命名该属性。 您只需使用以下更改创建新迁移:如何在Ruby on Rails迁移中重命名数据库列? 这些变化是不时需要的,因此Rails有这种机制来处理它们。

但要回答你的问题,另一种解决方法是在汽车上编写一个新方法,实际上可以像这样访问属性:

1
2
3
def rate_price
  read_attribute(:rate)
end