小编Nat*_*ong的帖子

如何用Nokogiri让空标签自动关闭?

我在ERB中创建了一个XML模板.我在导出过程中用数据库中的数据填充它.

在某些情况下,有一个空值,在这种情况下元素可能为空,如下所示:

<someitem>

</someitem>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,接收导出的客户端希望将其转换为自闭合标记:

<someitem/>
Run Code Online (Sandbox Code Playgroud)

我试图看看如何让Nokogiri这样做,但我还没有看到它.有人知道如何使Nokogiri自动关闭空XML标签吗?

更新

正则表达式足以完成我上面指定的操作,但客户端现在也希望其子项全部为空的标记可以自动关闭.所以这:

<someitem>
  <subitem>

  </subitem>
  <subitem>

  </subitem>
</someitem>
Run Code Online (Sandbox Code Playgroud)

......也应该

<someitem/>
Run Code Online (Sandbox Code Playgroud)

我认为这需要使用Nokogiri.

ruby xml nokogiri

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

如何使用Capybara检查是否列出了正确的物品?

我正在尝试使用Capybara来测试列表中是否包含正确的项目.例如:

<table id="rodents">
  <tr><td class="rodent_id">1</td><td class="rodent_name">Hamster</td></tr>
  <tr><td class="rodent_id">2</td><td class="rodent_name">Gerbil</td></tr>
</table>
Run Code Online (Sandbox Code Playgroud)

此列表包含ID 1和2,但不应包含3.

我想要的是:

ids = ? # get the contents of each row's first cell
ids.should include(1)
ids.should include(2)
ids.should_not include(3)
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

我正在回答一些我发现的令人不满意的解决方案,但我很乐意看到更好的解决方案.

ruby capybara

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

为什么Ruby模块继承不像类继承那样工作?

假设我有一个Flight使用类和实例方法调用的模块.我可以用得到它的方法分为一类include,extend或两者:

class Bat < Mammal
  # Add Flight's class methods to Bat.
  extend Flight

  # Add Flight's instance methods to Bat.
  include Flight
  ...
end
Run Code Online (Sandbox Code Playgroud)

include将添加FlightBat.ancestors,但extend不会.

我的问题是,为什么模块与课程不同?当我进行子类化时Mammal,我总是同时获得类和实例方法.但是,当我混合一个模块时,我不能同时获得类和实例方法(除非我使用self.included钩子或类似ActiveSupport :: Concern的东西).

这种差异背后是否存在语言设计问题?

ruby

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

正在改变`require`来连接Ruby文件的辉煌还是疯狂?

在启动具有大量依赖关系的Rails应用程序时,在require文件中花费了大量时间(我认为).

假设您要创建一个部署过程,将所有require语句转换为文件串联,使用相同的规则(不要两次获取相同的文件,等等).从本质上讲,它会以资产管道处理javascript的方式对待Ruby.

这会产生真正的速度差异吗?是否会产生任何问题 - 例如,使用可变范围 - 除了将错误跟踪到原始源文件更难?

总之,这是辉煌还是疯狂?

更新

正如pst指出的那样,这在生产中毫无意义,服务器可能会加载一次,然后分叉处理新的请求.

但请考虑测试环境,每次运行测试时都会在其中启动Rails应用程序.预先连接所有宝石可能会产生类似于Spork宝石的效果.

我想我真正的问题是require解析文件内容方面花了多少时间.

ruby ruby-on-rails ruby-on-rails-3

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

ActionDispatch :: Http :: UploadedFile #read返回空字符串

我有一个Rails应用程序,我正在解析上传的CSV.我刚刚发现解析已停止工作并正在调查.

我已经追溯到我调用.read一个实例的事实ActionDispatch::Http::UploadedFile,并返回一个空字符串.

上传的文件不为空,当我检查UploadedFile对象时,它有一个属性,如@tempfile=#<File:/tmp/RackMultipart20130530-34976-6jaqt5.如果我cat在文件系统上存档,它包含我期望的内容.

为什么可能.read返回一个空字符串?

我正在使用Rails 3.2.13.

ruby-on-rails ruby-on-rails-3.2

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

来自Rake的长时间运行的shell命令可以优雅地中断?

在几个项目中,我希望有一个rake任务rake server,它将通过它需要的任何方式开始为该应用程序提供服务.这是一个例子:

task :server do
  %x{bundle exec rackup -p 1234}
end
Run Code Online (Sandbox Code Playgroud)

这是有效的,但是当我准备停止它时,按下Ctrl+c不会优雅地关闭; 它会中断Rake任务本身,它表示rake aborted!并提供堆栈跟踪.在某些情况下,我必须做Ctrl+c两次.

我可能会写一些东西Signal.trap会更优雅地打断它.有没有更简单的方法?

ruby rake

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

如何从PostGIS获取地球上两点之间的距离?

我从PostGIS距离查询中得到了一个意外的值,我不知道为什么.我想找到地球上两点之间的距离.

SELECT ST_Distance(
  ST_Point(50.7678,6.091499)::geography,
  ST_Point(52.525592,13.369545)::geography
) as distance;
Run Code Online (Sandbox Code Playgroud)

...返回827757.672533206,或大约827.7km.

但是,如果我用我正在使用的开源库计算这个距离,或者使用几个在线计算器中的任何一个,我得到538.6km.有些东西显然不对劲.

我究竟做错了什么?

postgresql postgis

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

我如何“pg_dump”整个架构和**某些**表中的数据?

如何转储 PostgreSQL 数据库中的整个架构以及表子集中的数据?

pg_dump -s my_database -t table_1 -t table_2 > output.sql似乎忽略了-t标志并仅转储模式。

postgresql

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

为什么 Ecto 的 `cast` 不将整数转换为字符串?

我有一个 Ecto 架构,其中包括field :owned_by_id, :string. 我将该字段声明为字符串,因为我需要支持“abc123”等值以及“123”等值。

cast/3 的文档说:

第二个参数是根据来自 的类型信息进行转换的参数映射data

在我的模块中,我定义changeset如下:

def changeset(struct, params \\ %{}) do
  cast(struct, params, [:owned_by_id])
end
Run Code Online (Sandbox Code Playgroud)

当我这样做时:

MyModule.changeset(%MyModule{}, %{owned_by_id: 1})
Run Code Online (Sandbox Code Playgroud)

...我希望根据声明cast将该整数参数转换为字符串。owned_by_idfield

然而,我得到的是一个变更集,其中包括

errors: [owned_by_id: {"is invalid", [type: :string]}]
Run Code Online (Sandbox Code Playgroud)

我可以给Integer.to_string(1)自己打电话,但不应该cast处理这个吗?有没有办法让它自动处理这个问题?

elixir ecto

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

Rails是否无限期地使用单个"数据库会话"?

我在Rails应用程序中有自定义PostgreSQL预处理语句的用例(除了ActiveRecord自动执行的操作).

我的用例是批量插入一堆行,例如:

PREPARE insert_2_events (text, text, timestamp, int, json, timestamp, timestamp)
AS
INSERT INTO events (uuid, kind, generated_at, team_id, data, created_at, updated_at)
VALUES
($1, $2, $3, $4, $5, $6, $7), ($8, $9, $10, $11, $12, $13, $14)
ON CONFLICT(uuid) DO NOTHING;

EXECUTE insert_2_events(
  'ed8bd52a-4ea9-4548-ab02-87adfca90789', 'call', '2017-04-06T16:14:20-04:00', 1, '{"some":"data"}', '2017-04-06T20:14:20+00:00', '2017-04-06T20:14:20+00:00',
  '27c3251e-aff0-4005-918a-d7011f984515', 'text', '2017-04-06T16:14:20-04:00', 1, '{awesome:true}', '2017-04-06T20:14:20+00:00', '2017-04-06T20:14:20+00:00'
);
Run Code Online (Sandbox Code Playgroud)

我不知道,对于任何给定的执行,是否会有2行显示,10行或其他.所以我希望能够做到的是:

  • 如果我的方法被调用3行,看看我是否已经PREPARE编写了这个语句的3行版本.
  • 如果没有,PREPARE
  • EXECUTE

我可以跟踪"我已经准备好了吗?" 在应用程序代码中,但我不确定它是否可靠.

PostgreSQL的文档说:

准备语句仅持续当前数据库会话的持续时间.会话结束时,忘记了准备好的语句,因此必须重新创建它才能再次使用.这也意味着多个并发数据库客户端不能使用单个预准备语句; 但是,每个客户端都可以创建自己准备好的语句来使用.可以使用DEALLOCATE命令手动清除准备语句.

我不确定"数据库会话"概念如何映射到Rails应用程序.

  • Rails应用程序在运行的整个过程中是否会使用相同的数据库会话? …

postgresql ruby-on-rails

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