【问题标题】:Ruby on Rails: testing if values do exist?Ruby on Rails:测试值是否存在?
【发布时间】:2013-04-14 23:10:52
【问题描述】:

我正在尝试测试我的值是否存在...不知道该怎么做,我刚刚开始学习 Ruby on Rails。希望有人能指出我正确的方向吗?

假设我有这段代码:

@lv = {'apple' => ['red', 'round'], 'iPhone' => ['device', 'phone']}

if params[:var]
    @lv.each do |key, tags|
        if params[:var] == key
            lvtags = @lv[params[key]]
            lvtags.each do |tag|
                @tags = client.tag_recent_media(tag)
            end
        end
    end
end

我正在尝试查看通过if params[:var] == key 的循环是否有效。我想以某种方式输出alert() 类型的东西,以测试key 是否有值?有类似alert(key) 的东西吗?如果key 有东西,它会在哪里显示?或者我是否可以测试lvtags 是否有一个应该弹出的值?

例如,如果?var=0

然后我想测试alert(lvtags),因此这应该会弹出apple 或其他一些与lvtags = @lv[params[key]] 关联的值。我们通常如何在 Rails 中测试这样的东西?

谢谢

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 testing


    【解决方案1】:

    您可以发送puts keyPuts 将其第一个参数转换为字符串并在标准输出(您的控制台)中输出。

    不过,使用调试器可能更容易。你可以用

    打开一个控制台调试器(想想gdb)
    require 'debugger'; debugger
    

    一定要先安装the debugger gem。将以下内容放入您的 Gemfile 中

    gem 'debugger', group: [:development, :test]
    

    编辑:添加了调试器 gem 的 github 页面的链接。

    【讨论】:

    • 我正在尝试在我的观点中实现puts,但它甚至没有打印出我正在做的测试:,我什至尝试过 ,没有工作?
    • 我希望 puts 在您的控制器内(在 @lv.each do 内)。但是,puts 通常也应该在您的视图中起作用。但它不会在您的视图中显示任何信息。它会在您的控制台中显示它(您在其中输入rails server)。
    • 最好使用p 而不是puts 进行调试,因为它会打印更多有用的信息(例如nil 而不是什么都没有)
    • 您真的应该付出一些努力并学习如何使用调试器。我不确定为什么 ruby​​ 社区并不总是使用它——它比 puts 或 p 命令要好得多。打印完某些内容后,既然您知道结果,您可能想知道其他变量中的内容。由于调试器停止了流程,您可以只查看其他变量而无需新的请求和代码编辑。节省时间。
    【解决方案2】:

    您可以将其登录到您的控制台。

    Rails.logger.info key.inspect # or whichever's value you want to check
    

    检查对象时也很有帮助

    【讨论】:

    • 抱歉这个新手问题,但你能解释一下我会把这个放在哪里吗?我的控制器中有循环。不确定我应该在哪里应用您提供的代码?
    • 如果你想在循环的每次迭代中检查key,你可以把它放在@lv.each do |key, tags|循环里面
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-05
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-08
    相关资源
    最近更新 更多