我有一个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参数.
我应该使用哪种方法从文本创建新节点并用它替换当前节点?
如果我有这个工厂:
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的特征和忽略块).我希望这是有道理的.我可以在这里显示一堆代码,但我相信这提供了足够的上下文?
我想Paypal在Devise用户注册过程中集成.我想要的是有一个基于标准的rails表单devise resource,它也有属于用户模型的自定义字段.
当用户填写这些字段并点击注册时,它将被重定向到Paypal,当他从paypal清除并返回我们的网站时,必须创建用户数据.
对于用户填写PayPal表格但未返回我们网站的情况,我们必须在重定向到Paypal之前保留用户记录.
为此,我们可以在用户模型中创建一个标志并使用Paypal IPN,当通知用户事务时,设置该标志.
但是,如果用户被重定向到Paypal但未完成交易,如果用户返回注册并再次注册,我们的模型不应抛出错误,表示输入的电子邮件已存在于表中.
我们如何处理所有这些场景,是否有可用的gem或插件?
这里一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:
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返回它复制的字节数,但我怎么能知道什么时候我还没有下载的文件,但预期的字节数?
我在其中一种表格中使用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)
输入有名称提示,我想通过这些提示通过数据库设置其值。
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)
弃用警告:您尝试分配一个未显式的值
true或false分配给布尔列。目前该值转换为false. 这将更改以匹配 Ruby 的语义,并将在 Rails 5 中强制转换为true。如果您想维持当前行为,则应该显式处理您想要强制转换为的值false。
如果我更改 的数据定义,my_tinyint_col问题tinyint(2)就会消失 - 但有没有办法tinyint(1)使用 ActiveRecord 将其视为数字?
在下面,我希望第一个?字面使用,仅第二个字?用作绑定变量标记:
Foo.find_by_sql ["select IFNULL(col,'?') from foos where id = ?",1]
Run Code Online (Sandbox Code Playgroud)
这个错误:
错误数目的绑定变量(1表示2)
我将如何逃避第一个问题,?以便按字面意义对待它?
我正在用这段代码测试一个函数:
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方法生成存根,但我不知道如何强制存根使用所需参数调用回调
以前有人这样做过吗?
谢谢
将 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) 我有一个像这样的字段“位置”
"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 堆?因为我也存储它们?我可以避免垃圾收集吗?