Tag: 方法

Ruby on Rails:从另一个模型调用实例方法

我有一个Match模型和一个团队模型。 我希望在保存Match后运行实例方法(在Team模型中编写)。 这就是我所拥有的。 team.rb def goals_sum unless goal_count_cache goal_count = a_goals_sum + b_goals_sum update_attribute(:goal_count_cache, goal_count) end goal_count_cache end 它的工作原理。 现在我需要在保存匹配时运行它。 所以我尝试了这个: match.rb after_save :Team.goals_sum after_destroy :Team.goals_sum 它不起作用。 我知道我遗漏了一些基本的东西,但我仍然无法完成它。 有小费吗?

Selenium 2.0 Webdriver&Ruby,除.text之外的链接元素方法? Navigate.to数组中的链接?

我在将一些样品测试/规格从Watir转换为Selenium时更进一步。 在我的最后一个问题和建议的回复后,我开始使用Selenium 2.0与WebDriver而不是Selenium 1。 有问题的例子涉及将表中的所有链接收集到一个数组中 – 该部分是完整的。 但是,一旦链接在数组中,我可以与它们交互的唯一有意义的方式似乎是.text。 使用@ driver.navigate.to Array [1]在浏览器中显示URL格式错误,link.href或.src不是有效选项。 Watir实现收集了这些链接(用户通过CMS添加的页面),将它们存储在一个数组中,然后逐个访问每个页面,提交一个潜在客户表单。 我相信我可以使用Selenium工作并重新访问包含提交表单提交之间所有链接的“主页”页面,但这可能意味着数百个额外的页面加载,缓存与否。 到目前为止的代码:’@ country = Array.new @browser.navigate.to “http://www.testingdomain{$env}.com/global” @browser.find_elements(:xpath, “//table[@class=’global-list’]//a”).each do |link| @countries << [link.text, link.href] ## The original WATIR line that needs an update end #links @countries.uniq! #DEBUG for false CMS content' 我在selenium-webdriver文档中找到的最接近的项目是(字符串).attribute方法,但同样,我不确定哪些属性

Sinatra请求对象

我可能在这里遗漏了一些非常明显的东西,但我似乎无法找到答案,或者自己解决这个问题。 在Sinatra中,他们有一个self.get方法,它捕获块,当一个块被调用时,你可以在里面使用request变量,这怎么可能? 西纳特拉 module Sinatra class Base class Request < Rack::Request end attr_accessor :request def call!(env) @request = Request.new(env) end class << self def get(path, opts = {}, &block) … end end end end 应用 class App < Sinatra::Base get '/' do puts request end end

如何在Ruby中动态打开方法

我想动态打开一个方法并根据输入字段返回一个值。 我试着用这里的例子来问我想要什么。 如果我能成功这个例子,我会做我想做的事。 假设我有一个名为Greetings的类,它有一个名为greet()的方法,它将消息作为参数。 class Greetings def self.greet(message) return “good morning” if message==”gm” return “evening” if message==”ge” return “good afternoon” if message==”ga” end end 当我做Greetings.greet(“ge”) ,我得到“晚上”作为输出。 我想改变这种行为而不改变上面的Greetings类(显而易见的原因是它是一个外部库)。 我的问题很简单。 当我打电话给Greetings.greet(“ge”)时,我应该怎么做才能给我回复“A Very Good Evening”,对于所有其他输入,它应该返回原始类返回的内容。 我知道在Ruby中动态打开一个类但是如何将该方法委托给其他情况的父类? 我会在config / initializers文件夹中写这个,因为我正在使用Rails。

Ruby拥有== AND eql的任何好理由? ? (与to_a和to_ary类似)

我知道eql? Hashes使用它来查看一个对象是否与一个键*相匹配 def ==(rb) 如果你想支持==运算符,但必须有一个很好的理由,哈希不使用==。 这是为什么? 你什么时候有==和eql的定义? 那些不相等(例如,一个是另一个的别名)? 同样,为什么除了to_a之外还要to_ary? 出现这个问题是为了回应某人在另一个问题上给我的回答 。 *当然,Hash也假定eql? == true表示哈希码相等。 而且,它基本上是一个非常的想法,以覆盖相等? ?

如何检索当前方法名称以便将其输出到记录器文件?

我正在使用Ruby on Rails 3.2.2,为了显示警告消息以用于开发目的,我在我的代码中使用了logger.warn 。 我想检索运行logger.warn的方法名称 ,以便将该方法名称输出到日志文件中。 class ClassName < ActiveRecord::Base def method_name # Note: This code doesn't work. It is just a sample. logger.warn "I would like to retrieve and display the #{self.class.to_s}##{method_name}" end end 在日志文件中,我想看到: 我想检索并显示ClassName#method_name 可能吗? 如果是这样,我该怎么做?

我可以告诉Ruby方法期望特定的参数类型吗?

def doSomething(value) if (value.is_a?(Integer)) print value * 2 else print “Error: Expected integer value” exit end end 我可以告诉Ruby方法某个参数应该是一个Integer,否则崩溃? 像Java一样。

Rails – 如何从lib目录中调用方法?

我在lib目录中有这个方法(文件my_class_name.rb ): class MyClassName def doSomething … end … end 在控制器中: class UsersController < ApplicationController require 'my_class_name' def show_stats ::MyClassName.doSomething() end end 回报 MyClassName的未定义方法`doSomething’:Class 如何正确调用此方法?

如何在Array#delete_if中引用元素的索引

我想构建一个自定义方法Array#drop_every(n) (我知道它是猴子修补,我这是为了做作业),它返回一个新的数组,省略了每个第n个元素: [4, 8, 15, 16, 23, 42].drop_every(2) # [4, 15, 23] 我想用Array#delete_if来实现它,但是通过引用索引而不是元素本身,(类似于each_index )是这样的: def drop_every(step) self.delete_if { |index| index % step == 0 } end 我该怎么做呢? 我不坚持使用delete_if ,我也看了drop_while并reject ,欢迎其他建议。

使用“发送”而不是普通的方法调用有什么意义?

据我了解’发送’方法,这个 some_object.some_method(“im an argument”) 与此相同 some_object.send :some_method, “im an argument” 那么使用’发送’方法有什么意义呢?