我第一次跳进rails编程,在查看我下载的一些库的代码时,我偶尔会注意到代码:
class << self
def func
stuff
end
end
Run Code Online (Sandbox Code Playgroud)
我已经尝试在网上搜索一下解释,但是<< ???从最有用的搜索引擎中删除了,所以它最终只是搜索类自我,这不是很有用.任何见解将不胜感激.
安装Ruby和Ruby Gems之后:
$ sudo apt-get install ruby rubygems
...
$ ruby -v
ruby 1.8.7 (2010-06-23 patchlevel 299) [i686-linux]
$ gem -v
1.3.7
Run Code Online (Sandbox Code Playgroud)
如果我尝试安装Rails,我会收到一个错误,即使它似乎只是文档,rails也没有安装:
$ sudo gem install rails
...
Successfully installed rails-3.0.1
24 gems installed
...
Installing ri documentation for builder-2.1.2...
ERROR: While generating documentation for builder-2.1.2
... MESSAGE: Unhandled special: Special: type=17, text="<!-- HI -->"
... RDOC args: --ri --op /var/lib/gems/1.8/doc/builder-2.1.2/ri --title Builder -- Easy XML Building --main README --line-numbers --quiet lib CHANGES Rakefile README doc/releases/builder-1.2.4.rdoc doc/releases/builder-2.0.0.rdoc …Run Code Online (Sandbox Code Playgroud) 在Ruby中,程序员可以更改预定义的类.所以一个非常糟糕的程序员可以做类似的事情:
class String
def ==(other)
return true
end
end
Run Code Online (Sandbox Code Playgroud)
显然,几乎没有人会这么愚蠢,但是对于预定义类的更微妙的改变可能会导致已经工作的代码出现问题的想法在我看来违反了封装原则.
四个问题:
我知道这是一个有点主观的问题,但我真的想知道更广泛的编程社区对这个所谓的"猴子修补"的看法.
在SQL中它应该如下所示:
SELECT * FROM `categories_description_old` WHERE ((`categories_description` = '') OR (`categories_name` = '') OR (`categories_heading_title` = ''))
Run Code Online (Sandbox Code Playgroud)
我(丑陋)的解决方案:
conditions = [:categories_name, :categories_heading_title, :categories_description]
b = table_categories_description_old.filter(conditions.pop => "")
conditions.each do |m|
b = b.or(m => "")
end
Run Code Online (Sandbox Code Playgroud)
是否有更好的解决方案来链接或条件?
有没有办法获得Bundler(它是一个Rails 3)项目为当前项目加载的宝石的宝石或路径列表.
我正在寻找类似的东西:
Gem.path
Run Code Online (Sandbox Code Playgroud)
但是只返回Gemfile中Bundler主动要求的那些.
我在哪里可以为SAML 2.0 SSO挖掘Ruby或Ruby on Rails库.我有一组要构建的企业应用程序,但需要从中央身份验证系统进行联合登录.我在Microsoft .Net环境中使用过SAML 1.1和SAML 2.0,但还没有看到一个处理Ruby on Rails的SAML提供程序和消费者的库.有人可以指出我正确的方向或告诉我,我是否需要自己建立图书馆?
我知道Rails有一些很好的日期和时间管理助手.是否有一个已经完成的项目由标准单元及其转换组成或包含干净的DSL?任何带有助手的项目都可以在两个系统的基本长度和重量单位之间进行转换.谢谢!
Ruby 1.8.7.我正在使用带有^的正则表达式来匹配字符串开头的模式.问题是,如果在字符串中的任何行的开头找到模式,它仍然匹配.如果我使用'm'修饰符,这是我期望的行为,但我不是:
$ irb
irb(main):001:0> str = "hello\ngoodbye"
=> "hello\ngoodbye"
irb(main):002:0> puts str
hello
goodbye
=> nil
irb(main):004:0> str =~ /^goodbye/
=> 6
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?
类似于在Ruby中获取system()调用的输出,我正在运行系统命令,但在这种情况下,我需要在命令运行时输出STDOUT.
如果
@prescribed_wod_count = @user.workouts.rx_workouts.count 回报 4
和
@user_workout_count = @user.workouts.count 回报 26
怎么会
<%= number_to_percentage(@prescribed_wod_count / @user_workout_count) %>回报0.000%而不是15%?