我是 Ruby 的新手,最近在创建 Ruby on Rails 应用程序时遇到了与值进行比较的问题。在 Controller 中,我有以下始终返回 false 的语句:
if (user.id != params[:id])
问题是 user.id(它是一个 Active Record)是一个整数而 params[:id] 是一个字符串。我花了一段时间才弄清楚这一点,最后我将其更改为:
if (user.id != params[:id].to_i)
现在语句按预期工作。
为避免将来出现此错误,是否有一种方法可以“编译”或让 Ruby 在您尝试比较 2 种不同类型时发出警告?我遇到的其他一些我想“编译检查”的问题是:
- 如果我创建了一个变量但不使用它,请警告我。帮助检查变量名称中的拼写错误。
- 确保类中存在一个方法,这样我就可以避免方法名称拼写错误,也有助于重构,例如,如果我重命名一个方法。
我目前在 Windows 上使用 Ruby 1.8.6-27 RC2 和 Rails 2.3.2 和 RadRails IDE。
最佳答案
先测试,再编码。如果您编写的测试涵盖应用程序的所有分支,您就可以确保您的代码运行并产生正确的结果。
编辑:我应该指出,比较两种类型的能力、直到最后一秒才依赖于方法名称等是 Ruby 的核心特性。
与其说是调用方法,不如说是向对象发送消息。然后该对象负责确定如何处理该方法。在 Rails 中,这用于访问 ActiveRecord 中的数据库列。在将具有列名称的消息发送到对象之前,没有用于列的方法。
Ruby 中的静态类型与鸭子类型系统背道而驰。人们通常可以免费获得多态性,而不必担心复杂的继承/接口(interface)方案。
我建议接受这些特性并通过测试弥补不确定性
关于ruby-on-rails - 语法检查或 "Compiling"Ruby on Rails 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1104291/