ruby-on-rails - 语法检查或 "Compiling"Ruby on Rails 应用程序

标签 ruby-on-rails ruby compilation syntax-checking

我是 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/

相关文章:

javascript - Rails 应用程序 : require bootstrap vs require bootstrap-sprockets

ruby-on-rails - 如何使用 Devise 恢复密码 (Ruby on Rails)

ruby - 传递 proc 对象时 test(&p) 和 test(p) 之间的区别?

ruby-on-rails - 打印对象的独特方法

build - 如何加速 Nant Builds?

ios - Heroku 偶尔返回 "hostname"not found

ruby-on-rails - Ruby Gems 路径怪异

ruby-on-rails - 如何存储值以便在 Ruby on Rails 中的整个请求中共享该值?

compilation - 误删除了.pch文件

java - 如何在Java中创建空包?