Tag: 参数

Ruby:解析,替换和评估字符串公式

我正在为朋友的心理调查项目创建一个简单的Ruby on Rails调查应用程序。 所以我们有调查,每个调查都有一堆问题,每个问题都有参与者可以选择的选项之一。 没什么好激动的。 其中一个有趣的方面是每个答案选项都有一个与之相关的分数值。 因此,对于每个调查,需要根据这些值计算总分。 现在,我的想法是,不是硬编码计算,而是允许用户添加一个公式,通过该公式计算总调查分数。 示例公式: “Q1 + Q2 + Q3” “(Q1 + Q2 + Q3) / 3” “(10 – Q1) + Q2 + (Q3 * 2)” 所以只是基本的数学(为了清晰起见,附加一些括号)。 我们的想法是保持公式非常简单,这样任何拥有基本数学的人都可以输入它们,而无需解析某些奇特的语法。 我的想法是采用任何给定的公式,并用基于参与者选择的分数值替换Q1,Q2等占位符。 然后eval()新形成的字符串。 像这样的东西: f = “(Q1 + Q2 + Q3) / 2” # some crazy formula for this survey values = {:Q1 => […]

如何将命名参数传递给Rake任务?

有没有办法在不使用环境变量的情况下将命名参数传递给Rake任务? 我知道Rake任务可以接受两种格式的参数: 环境变量 $ rake my_task foo=bar 这将创建一个名为foo的环境变量和可以通过ENV[‘foo’]在Rake任务my_task访问的值bar 。 耙任务参数 $ rake my_task[‘foo’,’bar’] 这会将值foo和bar传递给前两个任务参数(如果已定义)。 如果my_task被定义为: task :my_task, :argument_1, :argument_2 那么argument_1的值为foo , argument_2的值为bar 。

RSpec测试使用GET参数重定向到URL

假设我有一个带有redirect_to_baz方法的FoosController 。 class FoosController < ApplicationController def redirect_to_baz redirect_to 'http://example.com/?foo=1&bar=2&baz=3' end end 我正在使用spec/controllers/foos_controller_spec.rb测试它: require ‘spec_helper’ describe FoosController, :type => :controller do describe “GET redirect_to_baz” do it “redirects to example.com with params” do get :redirect_to_baz expect(response).to redirect_to “http://example.com/?foo=1&bar=2&baz=3” end end end 有用。 但是,如果有人交换查询字符串参数(例如http://example.com/?bar=2&baz=3&foo=1 ),则测试失败。 测试这个的正确方法是什么? 我想做的事情如下: expect(response).to redirect_to(“http://example.com/”, params: { foo: 1, bar: 2, baz: 3 […]

Rails无法将未经许可的参数转换为哈希值

我正在尝试为我的webapp实现一个简单的搜索和排序。 我正在关注railscast和这个railscast 。 我作为链接使用的可排序函数的应用程序帮助程序是: def sortable(column, title = nil) title ||= column.titleize css_class = column == sort_column ? “current #{sort_direction}” : nil direction = column == sort_column && sort_direction == “asc” ? “desc” : “asc” link_to title, params.merge(:sort => column, :direction => direction, :page => nil), {:class => css_class} end 我在视图中使用这些。 在控制器中我使用白名单: @listingssearch.where(:vehicletype => ‘Car’).order(sort_column […]

如何使用splat和可选的哈希同时在ruby中定义方法?

我能够定义这样的方法: def test(id, *ary, hash_params) # Do stuff here end 但这使得hash_params参数成为hash_params参数。 这些也不起作用: def t(id, *ary, hash_params=nil) # SyntaxError: unexpected ‘=’, expecting ‘)’ def t(id, *ary, hash_params={}) # SyntaxError: unexpected ‘=’, expecting ‘)’ 有没有办法让它可选?

如何使用带有Sinatra斜线的参数?

和sinatra一起玩,我遇到了一个小问题:当我使用带有斜线的参数时,它会混淆路由器引擎。 那么有没有一种很好的方法来处理这种param而不必编码呢? 代码看起来像 get ‘add/:url’ do #…. end 我打算得到像/ add / http://sctackoverflow.com/这样的东西

*(星号)符号在函数参数附近做什么以及如何在其他场景中使用它?

我正在使用Ruby on Rails 3,我想知道函数参数附近是否存在*运算符,并了解其在其他场景中的用法。 示例场景(此方法来自Ruby on Rails 3框架): def find(*args) return to_a.find { |*block_args| yield(*block_args) } if block_given? options = args.extract_options! if options.present? apply_finder_options(options).find(*args) else case args.first when :first, :last, :all send(args.first) else find_with_ids(*args) end end end

用YARD记录“splatted”参数的最佳方法是什么?

我有一个方法应该采用任何类的1+参数,类似于Array#push : def my_push(*objects) raise ArgumentError, ‘Needs 1+ arguments’ if objects.empty? objects.each do |obj| puts “An object was pushed: #{obj.inspect}” @my_array.push obj end end 使用YARD语法记录方法参数的最佳方法是什么? 编辑: 我意识到我原来的问题有点过于模糊,并没有明确说明我在寻找什么。 一个更好的问题是,在使用splatted参数时,在YARD中指定方法的arity(在这种情况下为1-∞)的最佳方法是什么? 我知道我可以在文本中指定它,但似乎应该有一个标签或类似的东西来指定arity。

`exec’:string包含空字节(ArgumentError)

cmd = “snv co #{rep} –username #{svn_user} –password #{pxs}” puts cmd # this code wotks and prints all vars values normally exec(cmd) xpto.rb:69:in `exec’: string contains null byte (ArgumentError) from xpto.rb:69 $ ruby -v ruby 1.8.7 (2010-01-10 patchlevel 249) [i686-linux] $ gem -v 1.3.7 这是怎么回事? 我怎么解决这个问题?

Ruby – 关键字参数 – 您可以将所有关键字参数视为哈希吗? 怎么样?

我有一个看起来像这样的方法: def method(:name => nil, :color => nil, shoe_size => nil) SomeOtherObject.some_other_method(THE HASH THAT THOSE KEYWORD ARGUMENTS WOULD MAKE) end 对于任何给定的调用,我可以接受任意值的任意组合。 我喜欢命名参数,因为我可以查看方法的签名以查看可用的选项。 我不知道的是,上面的代码示例中是否有我用大写字母描述的快捷方式。 回到过去,它曾经是: def method(opts) SomeOtherObject.some_other_method(opts) end 优雅,简单,几乎作弊。 这些关键字参数是否有快捷方式,还是我必须在方法调用中重构我的选项哈希?