小编jos*_*eir的帖子

使用Nokogiri查找并替换整个HTML节点

我有一个HTML,应该转换,让一些标签替换为另一个标签.

我不知道这些标签,因为它们将来自db.所以,set_attribute或者nameNokogiri的方法不适合我.

我需要在某种程度上这样做,就像在这个伪代码中一样:

def preprocess_content
  doc = Nokogiri::HTML( self.content )
  doc.css("div.to-replace").each do |div|
    # "get_html_text" will obtain HTML from db. It can be anything, even another tags, tag groups etc.
    div.replace self.get_html_text
  end
  self.content = doc.css("body").first.inner_html
end
Run Code Online (Sandbox Code Playgroud)

我找到了Nokogiri::XML::Node::replace方法.我认为,这是正确的方向.

这个方法需要一些node_or_tags参数.

我应该使用哪种方法从文本创建新节点并用它替换当前节点?

html replace transformation ruby-on-rails nokogiri

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

FactoryGirl create_list传递多个值

如果我有这个工厂:

factory :product, class: Product do
  name        { Faker::Commerce.product_name }
  description { Faker::Lorem.paragraph }
  price       { Faker::Number.number(3) }
end
Run Code Online (Sandbox Code Playgroud)

我可以create_list用来创建这样的2个产品:

FactoryGirl.create_list(:product, 2)
Run Code Online (Sandbox Code Playgroud)

但我想将默认值传递给我的两个产品,我认为理论上会有这样的东西?:

prods = [{:name => "Product 1"},{:name => "Product 2"}]
FactoryGirl.create_list(:product, prods.count, prods)
Run Code Online (Sandbox Code Playgroud)

我已经搜索了一段时间而无法找到答案,是否可以使用优雅的解决方案create_list

我想要这个解决方案的原因是因为:product是父模型的许多子关联之一.我想要一种可配置的方式,我可以通过一个FactoryGirl.create命令生成父模型工厂,并传递我想要的子关联的所有值(通过使用FactoryGirl的特征和忽略块).我希望这是有道理的.我可以在这里显示一堆代码,但我相信这提供了足够的上下文?

ruby factory-bot

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

用户注册Devise和Paypal

我想PaypalDevise用户注册过程中集成.我想要的是有一个基于标准的rails表单devise resource,它也有属于用户模型的自定义字段.

当用户填写这些字段并点击注册时,它将被重定向到Paypal,当他从paypal清除并返回我们的网站时,必须创建用户数据.

对于用户填写PayPal表格但未返回我们网站的情况,我们必须在重定向到Paypal之前保留用户记录.

为此,我们可以在用户模型中创建一个标志并使用Paypal IPN,当通知用户事务时,设置该标志.

但是,如果用户被重定向到Paypal但未完成交易,如果用户返回注册并再次注册,我们的模型不应抛出错误,表示输入的电子邮件已存在于表中.

我们如何处理所有这些场景,是否有可用的gem或插件?

paypal ruby-on-rails paypal-sandbox devise ruby-on-rails-3

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

如何验证IO.copy_stream是否成功

这里一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:

/sf/answers/2082037611/

require 'open-uri'
download = open('http://example.com/image.png')
IO.copy_stream(download, '~/image.png')
Run Code Online (Sandbox Code Playgroud)

我如何验证下载文件的IO.copy_stream调用是否实际成功 - 这意味着下载的文件与我打算下载的文件完全相同,而不是下载了一半的损坏文件?该文件说,IO.copy_stream返回它复制的字节数,但我怎么能知道什么时候我还没有下载的文件,但预期的字节数?

ruby

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

离子游标滑块更新值与先前设置的值

我在其中一种表格中使用ionRangeslider来显示提示范围。

如何在提交按钮单击时更新值,以便在下次加载页面时显示具有该特定更新值的滑块?

HTML代码

<input type="text" class="exampleslider" id="exampleslider" name="tips">
Run Code Online (Sandbox Code Playgroud)

并通过js调用ionRangeSlider

$('.exampleslider').ionRangeSlider({
  from: 0,
  to: 100,
  min: 0,
  grid: true,
  grid_num: 10,
  step: 10,
  postfix: '%',
});
Run Code Online (Sandbox Code Playgroud)

输入有名称提示,我想通过这些提示通过数据库设置其值。

ion-range-slider

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

Rails 将 mysql tinyint(1) 视为布尔值 - 但我希望它是一个数字

Rails 4.2.1 使用 mysql2 gem。ActiveRecord 将数据类型为布尔值的 mysql 列视为tinyint(1)布尔值。但我想将它用作一个小数字 - 我想存储最多 100 的值,这对于tinyint(1). 当我尝试创建记录时,tinyint 列会转换为false,并收到折旧警告:

> Foo.create(my_tinyint_col: 13)
  (0.2ms)  BEGIN
    SQL (0.5ms)  INSERT INTO `foos` (`my_tinyint_col`) VALUES (0)
  (107.3ms)  COMMIT
  => #<Foo ID: 519, my_tinyint_col: false> 
Run Code Online (Sandbox Code Playgroud)

弃用警告:您尝试分配一个未显式的值truefalse分配给布尔列。目前该值转换为false. 这将更改以匹配 Ruby 的语义,并将在 Rails 5 中强制转换为true。如果您想维持当前行为,则应该显式处理您想要强制转换为的值false

如果我更改 的数据定义,my_tinyint_col问题tinyint(2)就会消失 - 但有没有办法tinyint(1)使用 ActiveRecord 将其视为数字?

mysql activerecord ruby-on-rails

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

Rails find_by_sql-使用“?” 从字面上而不是作为绑定变量?

在下面,我希望第一个?字面使用,仅第二个字?用作绑定变量标记:

Foo.find_by_sql ["select IFNULL(col,'?') from foos where id = ?",1]
Run Code Online (Sandbox Code Playgroud)

这个错误:

错误数目的绑定变量(1表示2)

我将如何逃避第一个问题,?以便按字面意义对待它?

activerecord ruby-on-rails rails-activerecord

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

诗乃:强制回拨电话

我正在用这段代码测试一个函数:

return new Promise((ok, fail) => {
  this.repository.findById(id, (error, result) => {
    if (error)
      return fail(error);
    ok(result);
  });
});
Run Code Online (Sandbox Code Playgroud)

我想测试失败的路径,即当findById方法调用带有错误的回调时.我正在使用sinon为我repository及其findById方法生成存根,但我不知道如何强制存根使用所需参数调用回调

以前有人这样做过吗?

谢谢

node.js sinon

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

Capybara:获取 &lt;script&gt; 标签内的内容?

将 Capybara 与 Rails 一起使用,我想获取带有<script>位于<body>. 当我运行此代码时,返回的值为空。<script>有什么方法可以获取 ?:中标签内的内容吗<body>

page.all('body script', visible: false).each do |el|
  puts 'script: '
  puts el.value.to_s
end
Run Code Online (Sandbox Code Playgroud)

我也尝试过puts el.text.to_s,结果相同。

有许多脚本标记元素(在上面的代码中全部打印为空白)。脚本标签的一个示例:

<script>
sConfig.backendTime = 655;
</script>
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails capybara

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

为什么全局序数建立在字段数据而不是 doc_values 上?

我有一个像这样的字段“位置”

 "location": {
        "type": "string",
        "index": "not_analyzed",
        "store": true,
        "fielddata": {
          "format": "doc_values"
        }
      },
Run Code Online (Sandbox Code Playgroud)

但是,当我在这个字段中使用术语聚合时,我看到了这种日志

[2015-05-13 15:42:56.210][DEBUG][index.fielddata.plain] Global-ordinals[location][361372] took 206 ms
[2015-05-13 17:55:44.692][DEBUG][index.fielddata.plain] Global-ordinals[location][461584] took 230 ms
[2015-05-13 17:56:21.907][DEBUG][index.fielddata.plain] Global-ordinals[location][263096] took 1205 ms
Run Code Online (Sandbox Code Playgroud)

而且我还可以看到 Java 堆大小已经增加,这导致了很长的旧垃圾收集。

为什么 doc_values 字段使用 java 堆?因为我也存储它们?我可以避免垃圾收集吗?

lucene elasticsearch

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