小编Car*_*ela的帖子

在Capybara/Poltergeist中打开一个新标签

我正在尝试使用capybara/poltergeist点击它来打开一个链接,它会在新标签中打开.

我似乎无法让它工作.

@session.find(<link>).click
Run Code Online (Sandbox Code Playgroud)

似乎只是停留在同一页面上

click_link "<link>"

@session.driver.window_handles 
Run Code Online (Sandbox Code Playgroud)

无论我在做什么,似乎只给我一个窗口.

如何在新标签中打开该链接?

对于什么有效或不成功,似乎有相当多的混淆(对于Capybara,如何切换到新窗口以获得与"_blank"目标的链接?).

希望有人能解决这个问题......似乎无法理解它.

好.通过更新到最新版本的poltergeist(1.6.0),我们取得了一些进展.

然而,现在我有两个窗口,但不知道如何在它们之间切换.

@session.windows
Run Code Online (Sandbox Code Playgroud)

给我

[Window @ handle ="0",Window @ handle ="1"](略有修改,因为它有点好笑).

@session.switch_to_window(1)
Run Code Online (Sandbox Code Playgroud)

结果是

NoMethodError: undefined method `handle' for "1":String
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails capybara phantomjs poltergeist

6
推荐指数
1
解决办法
4307
查看次数

在rails控制台中定义类(实例)方法

有没有办法在控制台中为类实例定义方法?

例如

 def Model.old?
   self.created_at < Time.now - 35.years
 end
Run Code Online (Sandbox Code Playgroud)

然后运行它

Model.find(1).old?
Run Code Online (Sandbox Code Playgroud)

ruby methods ruby-on-rails class

4
推荐指数
1
解决办法
2873
查看次数

使用ruby gmail api v0.9发送电子邮件

有没有人有一个简单的例子,说明如何使用v0.9 API从头开始发送电子邮件.

只想要一个发送以下内容的例子:

m = Mail.new(
to: "test1@test.com", 
from: "test2@test.com", 
subject: "Test Subject",
body:"Test Body")
Run Code Online (Sandbox Code Playgroud)

现在要创建需要发送的消息对象,我们可以使用:

msg = Base64.urlsafe_encode64 m.to_s
Run Code Online (Sandbox Code Playgroud)

然后尝试发送(其中message_object = msg):

client = Google::Apis::GmailV1::GmailService.new #Appropriately authorised
client.send_user_message("me", message_object)
Run Code Online (Sandbox Code Playgroud)

客户端需要RFC822兼容的编码字符串,以上应该是.

我试过了:

message_object = msg
=> Google::Apis::ClientError: invalidArgument: 'raw' RFC822 payload message string or uploading message via /upload/* URL required
message_object = raw:msg
=>ArgumentError: unknown keyword: raw
message_object = {raw:msg}
=>ArgumentError: unknown keyword: raw 
message_object = Google::Apis::GmailV1::Message.new(raw:msg)
=> #<Google::Apis::GmailV1::Message:0x007f9158e5b4b0 @id="15800cd7178d69a4", @thread_id="15800cd7178d69a4">
#But then I get Bounce <nobody@gmail.com> - An error …
Run Code Online (Sandbox Code Playgroud)

ruby gmail google-api google-api-ruby-client gmail-api

4
推荐指数
1
解决办法
886
查看次数

在jsonb postgres中按日期排序

我有一个模型,其中数据以 json 格式存储在 postgres 的 jsonb 列中。

我想使用 activerecord 查询按数据字段对输出进行排序。

Model.all.order("json_data -> 'date'")
Run Code Online (Sandbox Code Playgroud)

给我一个输出,但根据日期字符串按字母顺序排列。

有没有一种简单的方法可以将其排序为日期?

注意:日期格式如下:

"Fri, 24 Jun 2016 04:13:26 -0700"
Run Code Online (Sandbox Code Playgroud)

postgresql activerecord ruby-on-rails jsonb

3
推荐指数
1
解决办法
2328
查看次数

在一个视图表中对多个模型进行排序

我有一个模型,其中包含与之相关的各种不同类型的信息。

Opportunity.rb

has_many :notes
has_many :emails
has_many :calls
Run Code Online (Sandbox Code Playgroud)

我目前在显示页面上有 3 个表,在我调用的控制器中

@notes = @opportunity.notes.sorted
@emails = @opportunity.emails.sorted
@calls = @opportunity.calls.sorted
Run Code Online (Sandbox Code Playgroud)

并将它们显示在3个表中

我想按时间顺序对它们进行排序,这样我就可以得到一个时间表。

每个模型都有日期,我想按日期排序,然后按日期顺序返回对象。即表格如下:

Note | Content | 11-Feb | Bob
Call | Content | 07-Feb | Dave
Email | Content | 04-Feb | Steve
Call | Content | 03-Feb | Dave    
Note | Content | 01-Feb | Margaret
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚如何将控制器中的这些表合并到可以在视图中使用的对象中,以便我可以创建一个表,按日期(“created_at”)排序,并仍然保持一切看起来漂亮干净。

sorting controller model ruby-on-rails view

2
推荐指数
1
解决办法
883
查看次数

使用某些必需条件(大写字母,数字,特殊字符)生成固定长度的密码字符串

我正在尝试生成一定长度的安全密码,以满足特定条件.

例如,我想要(比方说)10个字母的密码:

至少有1封大写字母

至少有1个小写字母

至少有1个号码

至少有1个下划线(或其他字符,但下划线是好的,因为某些限制只接受下划线)

我试过了

SecureRandom.url_safeBase64(10)
Run Code Online (Sandbox Code Playgroud)

但这会产生太长的字符串,并不能保证每个限制都存在.

想知道是否有一个简单的方法......

ruby

2
推荐指数
1
解决办法
112
查看次数

来自数组的破坏性拒绝返回拒绝的值

有没有明智的方法来做到以下几点:

我想取一个数组并根据条件从数组中选择特定项,然后将它们从数组中移除.(我基本上想将数组的内容分成几类).

array = [1,2,3,4,5,6,7,8]

less_than_three = array.reject_destructively{|v| v<3}
=> [1,2]
array
=> [3,4,5,6,7,8]
more_than_five = array.reject_destructively{|v| v>5}
=> [6,7,8]
array
=> [3,4,5]
Run Code Online (Sandbox Code Playgroud)

我试过delete_if,选择!,拒绝!并且他们似乎都没有能够给你受影响的物品,而其余的则留下阵列.除非我生气,这完全有可能.

ruby arrays

2
推荐指数
2
解决办法
744
查看次数

将布尔实例方法作为"范围"调用

我有一个模特

Email
Run Code Online (Sandbox Code Playgroud)

和一个实例方法

def sent_to_user?(user)
  self.who_to == user
end
Run Code Online (Sandbox Code Playgroud)

who_to是另一个实例方法,用于检查一些复杂的东西.

在后台有更多的东西在那里,所以我不能轻易地把它变成一个activerecord查询.

我想做的事情如下:

scope :sent_to_user, -> (user) { sent_to_user?(user)} 

@user.emails.sent_to_user
Run Code Online (Sandbox Code Playgroud)

并返回仅为'sent_to_user?'返回true的电子邮件?

试过

scope :sent_to_user, -> (user) { if sent_to_user?(user)} 
Run Code Online (Sandbox Code Playgroud)

....等等.

不太确定如何构建该范围/类方法

ruby-on-rails rails-activerecord

2
推荐指数
1
解决办法
546
查看次数

将键值对添加到散列数组中的所有散列

我有一个哈希数组.

results = [{a:1, b:2},{a:3, b:4}]
Run Code Online (Sandbox Code Playgroud)

我想在所有哈希中添加一个元素"c",所以我最终得到:

results = [{a:1, b:2, c:"newvalue"},{a:3, b:4, c:"newvalue"}]
Run Code Online (Sandbox Code Playgroud)

我正在尝试一种更有效的方法,而不是在阵列中循环并逐一进行.

应澄清一下.通过"不迭代"我只是意味着不写

results.each do |a|
  a[:c] = "newvalue"
end
Run Code Online (Sandbox Code Playgroud)

也许问题有点愚蠢,但只是认为应该有类似于ActiveRecord风格的东西

results.update_all(C: "NEW_VALUE")

这比迭代更有效/更快......可能是因为数组没有区别......

或者之间的区别

array.map{|a| [a,2]}
Run Code Online (Sandbox Code Playgroud)

array.product([2])
Run Code Online (Sandbox Code Playgroud)

ruby

1
推荐指数
2
解决办法
5899
查看次数

ActiveRecord查询。其中字符串为数字

我在我的数据库中记录了一个时间元素,它是一个存储为字符串的数字。我想运行一个where查询,检查数字是否大于x,例如

Recording.where("recording_duration_ms.to_i > 60000")
Run Code Online (Sandbox Code Playgroud)

确保一定很简单...

ruby activerecord ruby-on-rails

1
推荐指数
1
解决办法
2104
查看次数

当 id 不为 nil 时允许访问 cancan / cancancan

我正在尝试使用 cancan 授予存在关联的访问权限。

它需要同时使用对象属性和 access_by 选择(所以我不能使用块,除非有人告诉我在这样做时如何解决错误)。

我想出了一个残酷的黑客。

lead.rb
has_many :recordings
has_many :emails

ability.rb

can :manage, Lead
can :manage, Recording, :lead_id => (1..Lead.pluck(:id).max).to_a
can :manage, Email, :lead_id => (1..Lead.pluck(:id).max).to_a
Run Code Online (Sandbox Code Playgroud)

我的意思是lead_id不为空...

有什么方法可以做到这一点,而不必每次都创建 100,000 个项目数组?


额外信息:值得注意的是,这些并不是 Recording 和 Emails 模型中唯一可用的控件,因此重要的是我可以添加额外的权限,而不是重置和否定它们。

ruby ruby-on-rails cancan

1
推荐指数
1
解决办法
2001
查看次数

具有activerecord select的jsonb字段的返回元素

如何从jsonb存储字段中“选择”值?

例如

@model1:
data: {"special_date" => "Wed, 16 Mar 2016 11:20:20 -0700", ....}
@model2:
data: {"special_date" => "Wed, 23 Mar 2016 11:20:20 -0700", ....}
Run Code Online (Sandbox Code Playgroud)

我想要类似的东西

Model.all.select("data -> 'special_date'")
Run Code Online (Sandbox Code Playgroud)

activerecord ruby-on-rails jsonb

1
推荐指数
1
解决办法
1601
查看次数

检查字符串是否包含电话号码

试图找出如何解析留在字符串中的电话号码.

例如

 "Hi Han, this is Chewie, Could you give me a call on 02031234567"
 "Hi Han, this is Chewie, Could you give me a call on +442031234567"
 "Hi Han, this is Chewie, Could you give me a call on +44 (0) 203 123 4567"
 "Hi Han, this is Chewie, Could you give me a call on 0207-123-4567"
 "Hi Han, this is Chewie, Could you give me a call on 02031234567 OR +44207-1234567"
Run Code Online (Sandbox Code Playgroud)

并且能够始终用其他项目(例如一些文本或链接)替换它们中的任何一个.

我假设它是一种正则表达式的方法(我已经做了类似的电子邮件,效果很好).

我得

 text.scan(/([^A-Z|^"]{6,})/i)
Run Code Online (Sandbox Code Playgroud)

这给我留下了一个领先的空间,我无法解决如何放弃(会很感激那里的帮助).是否有人们使用的标准方法?

它也会将内容放入数组中,这不是特别有用

即如果有多个数字. …

ruby string ruby-on-rails

0
推荐指数
1
解决办法
765
查看次数