Tag: ruby

为什么我要打印两次对象?

当我在irb或rails中创build一个迭代,我得到整个结构打印再次在我的terminal或浏览器内。 例: a = [1,2,3,4] a.each do |number| puts n end 在irbterminal或浏览器内的结果: 1 2 3 4 => [1,2,3,4] 为什么这个=> [1,2,3,4]出现在浏览器内部? 我无法在页面中创build单个列表,因为整个结构都显示出来了。

Ruby混淆器

有没有一个ruby混淆器或“编译器”?

为什么我们将Ruby 1.9.2 / 1.9.3 gem安装到1.9.1文件夹中?

这是因为gem命令使用的Gem安装目录(使用gem env时看到)设置为如下所示: <base_ruby_dir>/lib/ruby/gems/1.9.1 我的问题是为什么? 不应该调用该文件夹: <base_ruby_dir>/lib/ruby/gems/1.9.x 要么 <base_ruby_dir>/lib/ruby/gems/1.9 否则每个版本的Ruby都不能有一个,比如: c:/ruby191/lib/ruby/gems/1.9.1 c:/ruby192/lib/ruby/gems/1.9.2 c:/ruby193/lib/ruby/gems/1.9.3 不是我知道的关键问题,我只是想知道。

块定义 – 大括号和do-end之间的区别?

任何人都可以解释为什么下面的代码中止与一个错误 irb(main):186:0> print ((1..10).collect do |x| x**2 end) SyntaxError: (irb):186: syntax error, unexpected keyword_do_block, expecting ')' print ((1..10).collect do |x| x**2 end) ^ (irb):186: syntax error, unexpected keyword_end, expecting $end print ((1..10).collect do |x| x**2 end) ^ from /usr/bin/irb:12:in `<main>' 而下面的代码具有相同的function如预期的那样工作? irb(main):187:0> print ((1..10).collect { |x| x**2 }) [1, 4, 9, 16, 25, 36, 49, […]

这个Ruby代码中map(&:name)是做什么的?

为了更好的理解Ruby,我碰到了上网冲浪的代码: require 'rubygems' require 'activeresource' ActiveResource::Base.logger = Logger.new("#{File.dirname(__FILE__)}/events.log") class Event < ActiveResource::Base self.site = "http://localhost:3000" end events = Event.find(:all) puts events.map(&:name) e = Event.find(1) e.price = 20.00 e.save e = Event.create(:name => "Shortest event evar!", :starts_at => 1.second.ago, :capacity => 25, :price => 10.00) e.destroy 我特别感兴趣的是events.map(&:name)是如何工作的? 我看到事件是一个数组,因此它调用了它的映射方法。 现在我的问题是,传递给地图创build的块在哪里? 什么是符号:在这方面的名称? 我试图了解它是如何工作的。

Nokogiri / Xpath命名空间查询

我正在尝试使用xpath提取dc:title元素。 我可以使用下面的代码拉出元数据。 doc = <<END <?xml version="1.0" encoding="UTF-8"?> <package xmlns="http://www.idpf.org/2007/opf" version="2.0"> <metadata xmlns:dc="URI"> <dc:title>title text</dc:title> </metadata> </package> END doc = Nokogiri::XML(doc) # Awesome this works! puts '//xmlns:metadata' puts doc.xpath('//xmlns:metadata') # => <metadata xmlns:dc="URI"><dc:title>title text</dc:title></metadata> 正如你可以看到上述似乎正常工作。 但是,我似乎没有能够从这个节点树中获得标题信息,所有下面的失败。 puts doc.xpath('//xmlns:metadata/title') # => nil puts doc.xpath('//xmlns:metadata/dc:title') # => ERROR: `evaluate': Undefined namespace prefix puts doc.xpath('//xmlns:dc:title') # => ERROR: […]

什么时候在Ruby方法中使用`self.foo`而不是`foo`

这不是特定的Rails – 我只是使用Rails作为例子。 我在Rails中有一个模型: class Item < ActiveRecord::Base def hello puts "Hello, #{self.name}" end end (比方说, Item模型(类)有一个称为name的方法)。 我什么时候需要使用self.name ,什么时候可以使用name ? (例如#{name} )

不兼容的字符编码:ASCII-8BIT和UTF-8

我使用Ruby 1.9.2和Rails 3.0.5 我有以下错误: 不兼容的字符编码:ASCII-8BIT和UTF-8 这与我认为的数据库无关。 错误是在这条线在一个视图happinging(只是一个div haml调用): #content 完整的堆栈: ActionView::Template::Error (incompatible character encodings: ASCII-8BIT and UTF-8): 21: -flash.each do |name, msg| 22: =content_tag :div, msg, :id => "flash_#{name}" 23: %div.clear 24: #content 25: = yield 26: = render :partial => "layouts/grid_right" if render_grid_right? 27: = render :partial => "layouts/footer" app/views/layouts/application.html.haml:24:in `_app_views_layouts_application_html_haml___4380000789490545718_2180251300_2717546578298801795' actionpack (3.0.5) lib/action_view/template.rb:135:in […]

在Ruby on Rails中从模型中访问current_user

我需要在Ruby on Rails应用程序中实现细粒度的访问控制。 个人用户的权限保存在数据库表中,我认为最好让相应的资源(例如模型的实例)决定是否允许某个用户读取或写入。 每次在控制器中作出这个决定肯定不会很干。 问题是,为了做到这一点,模型需要访问当前用户,调用像may_read ?( current_user , attribute_name ) 。 一般来说,模型不能访问会话数据。 有相当多的build议来保存在当前线程中的当前用户的引用,例如在这篇博客文章中 。 这肯定会解决问题。 相邻的Google结果build议我在User类中保存一个对当前用户的引用,但是我猜这是被某个应用程序不需要一次容纳很多用户的人想到的。 ;) 长话短说,我觉得我希望从模型中访问当前用户(即会话数据)的愿望来自我做错了 。 你能告诉我我错了吗?

如何统计Ruby数组中的重复元素

我有一个sorting的数组: [ 'FATAL <error title="Request timed out.">', 'FATAL <error title="Request timed out.">', 'FATAL <error title="There is insufficient system memory to run this query.">' ] 我想得到这样的东西,但它不一定是一个哈希: [ {:error => 'FATAL <error title="Request timed out.">', :count => 2}, {:error => 'FATAL <error title="There is insufficient system memory to run this query.">', :count => 1} ]