假设您的Ruby on Rails应用程序中有一个ActiveRecord :: Observer - 如何使用rSpec测试此观察者?
我真正想念Java的一件事是工具支持.FindBugs,Checkstyle和PMD可实现三位一体的代码质量指标和自动错误检查.
是否有任何东西可以检查Ruby代码的简单错误和/或样式违规?如果我可以为Rails这样的框架调整它以便遵守Rails习语,则可以获得奖励积分.
如何在运行时将实例变量添加到已定义的类,然后从类外部获取并设置其值?
我正在寻找一种元编程解决方案,它允许我在运行时修改类实例,而不是修改最初定义类的源代码.一些解决方案解释了如何在类定义中声明实例变量,但这不是我所要求的.
我正在尝试通过本指南来完成Rails路由,但我在第3.3节中遇到了困难:
创建RESTful路由还可以在应用程序中提供一堆帮助程序
然后他们列出一些助手一样photos_url,photos_path等等.
我的问题:
我在哪里可以找到"提供"的完整助手列表?
有没有办法在控制台中调用助手?我创建了一个应用程序,然后打开了控制台script/console.我试着像这样调用控制台上的一个助手:
>> entries_url
Run Code Online (Sandbox Code Playgroud)
但得到了:
NameError: undefined local variable or method `entries_url' for #<Object:0x349a4>
from (irb):8
Run Code Online (Sandbox Code Playgroud) 我正在尝试为我博客上的每条评论创建独特的锚点,这样一个人就可以获取一个锚点的网址并将其粘贴到浏览器中,这将自动加载页面并向下滚动到页面中评论开始的位置.
也许我正在以错误的方式解决这个问题,但我已经尝试过这个但是无济于事.
注释视图 - 失败1 - 当粘贴在浏览器中时,此链接不会向下滚动到所需位置
<%= link_to '#', :controller => 'posts', :action => 'show', :id => comment.post, :anchor => 'comment_' << comment.id.to_s %>
Run Code Online (Sandbox Code Playgroud)
注释控制器 - 失败2 - 在浏览器中更正URL但没有滚动发生它只是停留在页面顶部
redirect_to :controller => 'posts', :action => 'show', :id => @post, :anchor => 'comment_' + @comment.id.to_s
Run Code Online (Sandbox Code Playgroud)
如果有人可以帮助我会非常感激:)
更新:下面的解决方案几乎可以工作,但是我提出了以下URL,如果我点击它就不会滚动到它.
我有一个对象数组,我需要通过一个可以是整数或零的位置属性进行排序,我需要将nil位置的对象放在数组的末尾.现在,我可以强制该位置返回一些值而不是nil,以便array.sort不会失败,但如果我使用0作为默认值,那么它将这些对象放在排序的前面.这种方法最好的方法是什么?我应该将nil值设置为一些"几乎"始终保证最终的可笑数字吗?或者是否有其他方法可以使array.sort方法将nil属性对象放在数组的末尾?代码如下所示:
class Parent
def sorted_children
children.sort{|a, b| a.position <=> b.position}
end
end
class Child
def position
category ? category.position : #what should the else be??
end
end
Run Code Online (Sandbox Code Playgroud)
现在,如果我把'else'变成1000000000,那么它很可能会把它们放在数组的末尾,但我不喜欢这个解决方案,因为它是任意的
我有一堆代码要看,现在是调试时间.由于我从未成为Ruby调试器的粉丝,因此我正在寻找一种通过代码并阅读它的方法.
我想要做的是获取定义加载类的文件的位置:
Foo::Bar.create(:param) # how can I know file location in runtime?
Run Code Online (Sandbox Code Playgroud)
对于规模较小,组织较好的项目,我只会搜索,class Bar但这里不可能,因为有很多类命名Bar,更糟糕的是,其中一些属于同一名称空间.我知道,等待发生的麻烦.
注意:我使用的是Ruby 1.8.7.
output.sort_by {|k, v| v}.reverse
Run Code Online (Sandbox Code Playgroud)
和钥匙
h = {"a"=>1, "c"=>3, "b"=>2, "d"=>4}
=> {"a"=>1, "c"=>3, "b"=>2, "d"=>4}
Hash[h.sort]
Run Code Online (Sandbox Code Playgroud)
现在我有这两个.但我正在尝试按值降序排序哈希,以便它返回
=> {"d"=>4, "c"=>3, "b"=>2, "a"=>1 }
Run Code Online (Sandbox Code Playgroud)
提前致谢.
编辑:让我发布整个代码.
def count_words(str)
output = Hash.new(0)
sentence = str.gsub(/,/, "").gsub(/'/,"").gsub(/-/, "").downcase
words = sentence.split()
words.each do |item|
output[item] += 1
end
puts Hash[output.sort_by{ |_, v| -v }]
return Hash[output.sort_by{|k, v| v}.reverse]
end
Run Code Online (Sandbox Code Playgroud) 我刚刚在虚拟机中运行的虚拟ubuntu 12.04 32bit上安装了RVM,Ruby,Rails等.现在我遇到了第一个rails项目bundle install或bundle update需要很长时间的问题.即使我用rails创建一个新项目(包括bundle install).
我只使用标准宝石:
source 'https://rubygems.org'
gem 'rails', '3.2.12'
# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'
group :development do
gem 'sqlite3', '1.3.5'
end
# Gems used only for assets and not required
# in production environments by default.
group :assets do
gem 'sass-rails', '3.2.5'
gem 'coffee-rails', '3.2.2'
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem 'therubyracer', :platforms => :ruby
gem 'uglifier', '1.2.3'
end
gem 'jquery-rails', '2.0.2' …Run Code Online (Sandbox Code Playgroud)