这更多的是“为什么这样做”这个问题,而不是“我不知道该怎么做”这个问题。 所以关于拉你知道你要使用的相关logging的福音是使用:include因为你会得到一个连接,并避免了一大堆额外的查询: Post.all(:include => :comments) 但是,当您查看日志时,不会发生任何连接: Post Load (3.7ms) SELECT * FROM "posts" Comment Load (0.2ms) SELECT "comments.*" FROM "comments" WHERE ("comments".post_id IN (1,2,3,4)) ORDER BY created_at asc) 它正在采取一个捷径,因为它一次拉出所有的注释,但它仍然不是一个连接(这是所有的文件似乎说)。 我能得到一个连接的唯一方法是使用:joins而不是:include : Post.all(:joins => :comments) 日志显示: Post Load (6.0ms) SELECT "posts".* FROM "posts" INNER JOIN "comments" ON "posts".id = "comments".post_id 我错过了什么吗? 我有一个半打协会的应用程序,并在一个屏幕上显示所有的数据。 似乎有一个联合查询而不是6个人会更好。 我知道性能方面,并不总是更好的做一个连接,而不是单个的查询(事实上,如果你花时间去看,上面的两个单独的查询看起来比连接快),但毕竟文档我一直在阅读,我很惊讶地看到:include不按照广告。 也许Rails 是认识到性能问题,除了在某些情况下不join?
我在初始化程序中使用以下行来在开发过程中自动载入我的/lib目录中的代码: configuration/初始化/ custom.rb: RELOAD_LIBS = Dir[Rails.root + 'lib/**/*.rb'] if Rails.env.development? (来自Rails 3 Quicktip:在开发模式下自动重载库文件夹 ) 它效果很好,但在生产中使用效率太低 – 不是每次请求都加载库,而只是想在启动时加载它们。 同一篇博客有另一篇文章描述如何做到这一点: configuration/ application.rb中: # Custom directories with classes and modules you want to be autoloadable. config.autoload_paths += %W(#{config.root}/lib) config.autoload_paths += Dir["#{config.root}/lib/**/"] 但是,当我切换到,即使在开发中,当试图使用lib函数时,我得到NoMethodErrors。 我的一个lib文件的例子: LIB / extensions.rb中: Time.class_eval do def self.milli_stamp Time.now.strftime('%Y%m%d%H%M%S%L').to_i end end 调用Time.milli_stamp会抛出NoMethodError 我意识到其他人已经回答了类似的问题,但他们似乎都处理命名约定和其他问题,我以前不必担心 – 我的lib类已经为每个请求加载工作,我只是想改变它到每启动加载。 什么是正确的方法来做到这一点?
在Rails中, attr_accessor和attr_accessible什么attr_accessible ? 根据我的理解,使用attr_accessor可以为该variables创buildgetter和setter方法,以便我们可以访问像Object.variable或Object.variable = some_value这样的variables。 我读到attr_accessible使外部世界可以访问的特定variables。 有人可以告诉我最新的差异
我想在Rails中“伪造”一个404页面。 在PHP中,我只需要发送一个包含错误代码的头文件: header("HTTP/1.0 404 Not Found"); Rails是如何完成的?
如何在Ruby中编写switch语句?
rake db:migrate和rake db:reset之间的区别在我的脑海中是相当清楚的。 我不明白的是rake db:schema:load和前两个不同。 只要确定我在同一页面上: rake db:migrate – 运行尚未运行的迁移。 rake db:reset – 清除数据库(大概做一个rake db:drop + rake db:create + rake db:migrate ),然后在新数据库上运行迁移。 如果我的理解出了问题,请帮忙澄清一下。
你可能熟悉下面的Ruby速记( a是一个数组): a.map(&:method) 例如,在irb中尝试以下内容: >> a=[:a, 'a', 1, 1.0] => [:a, "a", 1, 1.0] >> a.map(&:class) => [Symbol, String, Fixnum, Float] 语法a.map(&:class)是a.map {|x| x.class}的缩写 a.map {|x| x.class} 。 阅读“ 在Ruby中map(&:name)是什么意思 ”中有关此语法的更多信息? 通过语法&:class ,你正在为每个数组元素做一个方法调用class 。 我的问题是:你可以提供参数的方法调用? 如果是的话,怎么样? 例如,你如何转换下面的语法 a = [1,3,5,7,9] a.map {|x| x + 2} 到&:语法? 我并不是build议&:语法更好。 我只是对使用带有参数的&: syntax的机制感兴趣。 我假设你知道+是Integer类的一个方法。 您可以在irb中尝试以下内容: >> a=1 => 1 […]
我正在将一个CLI库从Ruby移植到Node.js。 在我的代码中,我需要时执行几个第三方的二进制文件。 我不知道如何最好的在Node中做到这一点。 下面是Ruby中的一个例子,我打电话给PrinceXML将文件转换为PDF: cmd = system("prince -v builds/pdf/book.html -o builds/pdf/book.pdf") 什么是节点中的等效代码?
关于这个问题的大部分问题是由于缺lessXcode; 我有Xcode 4.2安装。 安装尝试: rvm install 1.9.3 Installing Ruby from source to: /Users/jamie/.rvm/rubies/ruby-1.9.3-p0, this may take a while depending on your cpu(s)… ruby-1.9.3-p0 – #fetching ruby-1.9.3-p0 – #extracted to /Users/jamie/.rvm/src/ruby-1.9.3-p0 (already extracted) Fetching yaml-0.1.4.tar.gz to /Users/jamie/.rvm/archives Extracting yaml-0.1.4.tar.gz to /Users/jamie/.rvm/src Configuring yaml in /Users/jamie/.rvm/src/yaml-0.1.4. Compiling yaml in /Users/jamie/.rvm/src/yaml-0.1.4. Installing yaml to /Users/jamie/.rvm/usr ruby-1.9.3-p0 – #configuring […]
Ruby有这样一个方便方便的方法来使用键来共享实例variables attr_accessor :var attr_reader :var attr_writer :var 如果我可以简单地使用attr_accessor为什么我会selectattr_reader或attr_accessor ? 有没有像表演(我怀疑)? 我猜这是有原因的,否则就不会有这样的关键。