草庐IT

ruby-on-rails - 为什么使用 "self"访问 ActiveRecord/Rails 模型属性?

在我的整个应用程序中,self.没有必要引用用户名。name工作正常。为什么以下代码需要self才能按预期工作?classUser顺便说一句,我知道validates_presence_of可以用来防止保存,但如果没有给出名称,我想使用默认值保存。rails3.0.7。 最佳答案 通常使用self是为了强制Ruby将其识别为方法调用,而不是将其错误解释为变量。如果事先不知道名为day=的方法,那么day="x"在Ruby中看起来就像一个变量赋值。self.day="x"始终是方法调用。之所以麻烦是因为name和name=方法是在解析

ruby-on-rails - 从 Ruby on Rails 中的 collection.map 中排除选项?

我有这样一行:{:value=>(policy_address.state.namerescuenil)},:required=>true,:collection=>states.map{|s|[s.name,s.id]},:include_blank=>'Pleaseselect'%>我想从states.map集合中排除一个值。我认为这行得通,但行不通:{:value=>(policy_address.state.namerescuenil)},:required=>true,:collection=>states.map{|s|[s.name,s.id]unlesss.name==

ruby - 是 &method( :method_name) idiom bad for performance in Ruby?

我最近遇到了&method(:method_name)语法。(这使用Object#method方法-RDoclink)例如,[5,7,8,1].each(&method(:puts))相当于[5,7,8,1].each{|number|putsnumber}在Ruby的各种实现中,与前者相比,后者是否存在性能损失?如果是,实现者是否正在努力提高其性能? 最佳答案 是的,这似乎对性能不利。deftimestart=Time.nowyield"%.6f"%(Time.now-start)enddefdo_nothing(arg)endR

ruby - 未安装 gem 时如何从 require "gem_name"中解救

我正在编写一个依赖于特定gem的库。我需要gem并在我的代码中使用它,只要在用户的机器上安装了gem,一切都很好。但如果不是呢?!我认为这很好,因为我可以从require命令中解救出来并向输出打印一条消息以通知用户缺少gem并优雅地完成它,但我收到错误!你能告诉我应该怎么做或者这段代码有什么问题吗:beginrequire"some_gem"rescueputs"pleaseinstallsome_gemfirst!"end 最佳答案 如果require无法加载所需的库,则会引发LoadError异常。但是,您从不在任何地方从Loa

ruby - 为什么 Ruby 中的双铲不改变状态?

我遇到了导致错误或困惑的奇怪副作用。所以想象一下,这不是一个微不足道的例子,而是一个陷阱的例子。name="Zorg"defsay_hello(name)greeting="Hithere,"这不会改变名称。姓名仍为Zorg.但是现在来看一个非常细微的差别。在下一个示例中:name="Zorg"defsay_hello(name)greeting=name现在名称是Zorg?.疯狂的。greeting=的细微差别|任务。Ruby在内部使用解析(?)或消息传递链接做一些事情?我以为这只会像name.一样把铲子链起来但我想这不会发生。这就是为什么我在尝试进行串联时避免使用铲子运算符。我通常

ruby-on-rails - rails : Model instance method or helper method?

按照惯例,应将以下定义为我的模型的实例方法还是辅助方法?#app/models/user.rbclassUser或#app/helpers/users_helper.rbmoduleUsersHelperdeffull_name"#{@user.first_name}#{@user.last_name}"endend非常感谢。 最佳答案 选择第一个(保留在模型中),也是因为您可能想做其他事情,比如组合索引:) 关于ruby-on-rails-rails:Modelinstancemeth

ruby-on-rails - `add_route' : Invalid route name, 已在使用中:'root' (ArgumentError)

我使用的是rails4.1.1和ruby​​2.1.1,我在设计方面遇到了问题,即我的路线。我以前用过很多次devise_for:usersget'pages/index'#RoutetoDeviseLoginPagedevise_scope:userdorootto:"devise/sessions#new"end#Directingtheuserafterloginauthenticated:userdoroot:to=>'pages#index'end但是我得到了错误`add_route':Invalidroutename,alreadyinuse:'root'(Argument

ruby-on-rails - 使用 named_scope 获取行数

Rails专家:感谢另一位SO用户,我刚刚发现了named_scope。:)我想获取一组行的计数-即SELECTCOUNT(*)。此外,我希望仍然能够在调用中链接命名范围。这是命名范围的合法(尽管很奇怪)用法吗?named_scope:count,:select=>"COUNT(*)ascount_all"然后我可以做(例如):@foobar=Foobar.count.scope.scope.scope计数通过@foobar.first.count_all访问。(EditedtoaddressAllan'scomments)你可以这样做:@foobar=Foobar.scope.sco

ruby - 如何修复意外的 'sudo bundle install dir_name' ?

我不小心运行了sudobundleinstallsmtp_mail,现在我所有的gem都在我的Rails应用程序中这个名为smtp_mail的目录中。我不确定gem的默认位置?而且,我的Rails应用程序在启动时提示。有什么办法可以恢复原状吗? 最佳答案 经过一番谷歌搜索后,我找到了答案只需运行:sudobundleinstall--system然后您会将您的gem放回到它们适当的系统目录中。 关于ruby-如何修复意外的'sudobundleinstalldir_name'?,我们在S

ruby-on-rails - `name' :String 的未定义方法 "SystemTimer"

我在让一年内无法运行的旧RubyonRails2应用程序运行时遇到问题。我正在尝试在我的项目目录的根目录中运行raketest:functionals,但我得到的是undefinedmethod'name'for"SystemTimer":String。我已将我认为与问题相关的所有内容粘贴到此处:http://pastebin.com/NgBvystZ此外,当我自己运行rake时,我得到运行测试时出错:units!不确定如何调试。我已经复制并粘贴了我认为对理解这个问题有用的所有内容。非常感谢您的宝贵时间。谢谢。 最佳答案 这是高于1