我正在编写一个处理来自文本区域的用户输入的模型.根据http://blog.caboo.se/articles/2008/8/25/sanitize-your-users-html-input的建议,我在使用before_validate保存到数据库之前清理模型中的输入打回来.
我模型的相关部分如下所示:
include ActionView::Helpers::SanitizeHelper
class Post < ActiveRecord::Base {
before_validation :clean_input
...
protected
def clean_input
self.input = sanitize(self.input, :tags => %w(b i u))
end
end
Run Code Online (Sandbox Code Playgroud)
不用说,这不起作用.当我尝试保存新帖子时出现以下错误.
undefined method `white_list_sanitizer' for #<Class:0xdeadbeef>
Run Code Online (Sandbox Code Playgroud)
显然,SanitizeHelper创建了一个HTML :: WhiteListSanitizer的实例,但是当我将它混合到我的模型中时,它找不到HTML :: WhiteListSanitizer.为什么?我该怎么做才能解决这个问题?
Ruby有阻止评论吗?
如果没有,是否有一种有效的方法插入#TextMate中突出显示的代码块之前?
有时我看到Ruby中的方法有"?" 和"!" 在他们的最后,例如:
name = "sample_string"
name.reverse
name.reverse!
name.is_binary_data?
Run Code Online (Sandbox Code Playgroud)
我想知道他们的目的是什么?它们只是语法糖衣吗?
我是Ruby的新手,并试图围绕以下概念:Bundler vs RVM vs gems vs RubyGems vs gemsets vs system rub我很困惑.
有人可以描述一个"最佳实践",说明如何在全新安装最新版本的Ubuntu时管理所有这些内容吗?我应该安装什么,以及如何使用它?
我猜sudo apt-get install ruby不会推荐做一个,但我不确定.除了"所有其他Ruby东西"之外,我在我的系统上尝试过它.这只会增加我的困惑.我不是在谈论Rails,而只是常规的Ruby宝石(例如Vagrant,Chef,脚本).
我正在寻找一种在Ruby中对字符串执行正则表达式匹配的方法,并在第一次匹配时使其短路.
我正在处理的字符串很长,看起来标准方式(match方法)会处理整个事物,收集每个匹配,并返回包含所有匹配项的MatchData对象.
match = string.match(/regex/)[0].to_s
Run Code Online (Sandbox Code Playgroud) 我想在插入字符串后添加一个新行.
我当前的代码如下所示:
File.open(filename, 'a') do |file|
file.write @string
end
Run Code Online (Sandbox Code Playgroud)
插入字符串后如何添加新行?
现在,如果我使用我的测试套件rake spec我得到一个错误:
1) SegmentsController GET 'index' should work
Failure/Error: get 'index'
undefined method `locale' for #
# ./spec/controllers/segments_controller_spec.rb:14:
in `block (3 levels) in '
这是正常的,因为我有一个错误:)
问题是跟踪不是很有帮助.我知道它突破了segments_controller_spec.rb,第14行,但这只是我称之为测试的地方:
### segments_controller_spec.rb:14
get 'index'
Run Code Online (Sandbox Code Playgroud)
我更喜欢实际的断行和完整的跟踪,而不是spec文件夹中的部分.
跑步--trace并没有帮助.
有没有任何简洁的方法将"1,112"转换为整数1112而不是1?
我有一个,但不是很整洁:
"1,112".split(',').join.to_i #=> 1112
Run Code Online (Sandbox Code Playgroud) 我foo在数据库中有一个记录:start_time和:timezone属性.
例如,:start_time是UTC时间2001-01-01 14:20:00.这:timezone是一个字符串 - America/New_York例如.
我想创建一个新的Time对象,其值为,:start_time但其时区由其指定:timezone.我不想加载:start_time然后转换为:timezone,因为Rails会很聪明并且从UTC更新时间以与该时区保持一致.
目前,
t = foo.start_time
=> 2000-01-01 14:20:00 UTC
t.zone
=> "UTC"
t.in_time_zone("America/New_York")
=> Sat, 01 Jan 2000 09:20:00 EST -05:00
Run Code Online (Sandbox Code Playgroud)
相反,我想看到
=> Sat, 01 Jan 2000 14:20:00 EST -05:00
Run Code Online (Sandbox Code Playgroud)
即.我想要做:
t
=> 2000-01-01 14:20:00 UTC
t.zone = "America/New_York"
=> "America/New_York"
t
=> 2000-01-01 14:20:00 EST
Run Code Online (Sandbox Code Playgroud)