Tag: ruby

Ruby:IF语句中的Nils

我正在使用的rails应用程序中有以下非常难看的ruby代码: if params.present? if params[:search].present? if params[:search][:tags_name_in].present? … end end end 所有我想问的是是否已经定义了params [:search] [:tags_name_in],但因为params,params [:search]和params [:search] [:tags_name_in]可能都是nil,如果我使用… if params[:search][:tags_name_in].present? …如果没有参数或没有搜索参数,我会收到错误。 肯定有一个更好的方法来做到这一点……建议?

为什么人们会在ruby中的属性上使用一元运算符? 即&:首先

可能重复: Ruby / Ruby on Rails&符号冒号快捷方式 作为一种习惯,我会尝试定期阅读一些别人的源代码并在一个要点上对其进行评论。 现在我正在阅读sinatra的基础应用程序,并发现了一些有趣的代码(这是他们的Request类的一部分) def accept @env[‘sinatra.accept’] ||= begin entries = @env[‘HTTP_ACCEPT’].to_s.split(‘,’) entries.map { |e| accept_entry(e) }.sort_by(&:last).map(&:first) end end 我没有得到的部分是&:last和&:首先做什么?!? 它似乎是疯狂的!

为什么我们要避免在rails中使用类变量@@?

为什么我们要避免在rails中使用类变量@@? 这有什么安全漏洞吗? 请回答,因为我是新的rails。 我正在使用实例变量@variable_name 。 我试过一次@@variable_name 。 我只知道类变量是, 类变量在对象之间是可共享的 但我真的想知道为什么我们要避免在rails中使用类变量@@?

解析与操作的可变范围和顺序:“if”中的赋值

我的理解是,行前面的if语句在行前面的代码之前进行了评估: ‘never shown’ if (false) 并且可以在if语句中进行赋值。 ‘shown’ if (value = ‘dave is king’) value #=> “dave is king” 并且,当分配了不存在的变量时,将创建该变量。 事先不需要它存在。 这是真的? 如果所有这些假设都是真的,为什么会失败呢? error_array < undefined local variable or method `error’ for 它在数组推右前分配给错误? 我想了解什么时候进行评估。 这个确实有效: if (error = import_value(value)) error_array << error end 现在我真的很困惑。

为什么在后钩中添加“sleep 1”会导致此Rspec / Capybara测试通过?

我使用的是rails 4.0.5,rspec 2.14.1,capybara 2.2.1,capybara-webkit 1.1.0和database_cleaner 1.2.0。 我通过以下function测试看到一些奇怪的行为(模拟用户在post上查看评论,将鼠标hover在图标上以显示菜单,然后单击菜单项以删除评论): let(:user){create(:user)} let(:post){create(:post, author: user)} let!(:comment){create(:comment, post: post, author: user)} … it “can delete a comment” do assert(page.has_css? “#comment-#{comment.id}”) find(“#comment-#{comment.id}-controls”).trigger(:mouseover) find(“#comment-#{comment.id} .comment-delete a”).click assert(page.has_no_css? “#comment-#{comment.id}”) end 这个测试大约80%的时间都失败了,总是由于某些记录从数据库中检索为nil – 我得到NoMethodError: undefined method X for nil:NilClass ,对于各种X值。有时nil是正在评论的删除,有时它是评论附加的post,有时它是评论/post的作者。 如果我在测试结束时添加sleep 1 ,它会通过: it “can delete its own comment” do assert(page.has_css? “#comment-#{comment.id}”) find(“#comment-#{comment.id}-controls”).trigger(:mouseover) find(“#comment-#{comment.id} […]

Google地图,Ruby on Rails,使用一个标记缩放级别

我正在使用apneadiving / Google-Maps-for-Rails添加谷歌地图支持(感谢真棒gem) 我发现了一个轻微的故障,这很可能是我的错。 当有多个标记时,auto_zoom很有效。 但是,当只有一个标记时,它会放大到不同的最大级别。 “zoom”仅在auto_zoom为false时有效,因此这不是我想要的。 因此,您可以使用“maxZoom”,但现在用户无法手动放大超出该点,这不是我想要的。 有没有解决的办法? 我的解释有意义吗? 这是Google Maps API的限制吗? 谢谢…

查询,无法选择列数

Tag.joins(:quote_tags).group(‘quote_tags.tag_id’).order(‘count desc’).select(‘count(tags.id) AS count, tags.id, tags.name’) Build query: SELECT count(tags.id) AS count, tags.id, tags.name FROM `tags` INNER JOIN `quote_tags` ON `quote_tags`.`tag_id` = `tags`.`id` GROUP BY quote_tags.tag_id ORDER BY count desc 结果: [#, … , #] 它不会为我返回计数列。 我怎么才能得到它?

如何从Rails中的date_select或select_date获取日期?

使用select_date会给我一个带有year , month和day属性的params[:my_date] 。 如何轻松获取Date对象? 我希望像params[:my_date].to_date这样的东西。 我也很高兴使用date_select 。

在Rails中,用英语显示两个日期之间的时间

在Rails项目中,我想找到两个日期之间的差异,然后用自然语言显示它。 就像是 >> (date1 – date2).to_natural_language “3 years, 2 months, 1 week, 6 days” 基本上这是ruby。 谷歌和Rails API没有发现任何东西。 我发现了一些可以让你在一个单元中产生差异的东西(即两个日期之间有多少个星期)但不能准确计算出几年,几个月,几周,几天的东西。

ARGV在Ruby中有什么意义?

ARGV在Ruby中有什么意义? first, second, third = ARGV puts “The script is called: #{$0}” puts “Your first variable is: #{first}” puts “Your second variable is: #{second}” puts “Your third variable is: #{third}” 运行我需要做的文件时,重点是什么: ruby ex1.rb 并输入我需要输入的第一,第二和第三个变量 ruby ex1.rb blah blah blah 这对所有运行该程序的人有何益处? 他们无论如何都做不到,因为我认为它是一个可执行文件: user = ARGV.first prompt = ‘> ‘ puts “Hi #{user}, I’m the #{$0} script.” […]