小编Mik*_*ell的帖子

ruby如何生成树形结构表单数组?

我有一个数组,其中包含这样的项目列表

arr = [
  {:id=>1,  :title=>"A",      :parent_id=>nil}, 
  {:id=>2,  :title=>"B",      :parent_id=>nil},
  {:id=>3,  :title=>"A1",     :parent_id=>1}, 
  {:id=>4,  :title=>"A2",     :parent_id=>1},
  {:id=>5,  :title=>"A11",    :parent_id=>3}, 
  {:id=>6,  :title=>"12",     :parent_id=>3},
  {:id=>7,  :title=>"A2=121", :parent_id=>6}, 
  {:id=>8,  :title=>"A21",    :parent_id=>4},
  {:id=>9,  :title=>"B11",    :parent_id=>2}, 
  {:id=>10, :title=>"B12",    :parent_id=>2},
   ...
]
Run Code Online (Sandbox Code Playgroud)

如果parent_id是,nil那么它应该是父节点,如果parent_id不是nil那么它应该在特定父节点下.

基于idparent_id,我想提供这样的回复:

-A
  -A1
    -A11
    -A12
      -A123
  -A2
    -A21
-B
  -B1
    -B11
    -B12
Run Code Online (Sandbox Code Playgroud)

我怎么能产生上面提到的回应?

谢谢

ruby arrays algorithm tree performance

9
推荐指数
3
解决办法
5788
查看次数

比较相似的图像作为照片 - 检测差异,图像差异

这种情况在我已经能够找到的任何东西中都是独一无二的,如下所示:如果我拍了两张相似图像的照片,我希望能够突出显示两幅图像中的不同特征.例如以下两个孩子的现场差异游戏:

左半边的差异 右半部分现货差异

图像的差异将是缺失/添加的位和/或颜色变化,以及通过不做任何比逐像素比较更聪明的原始图像文件可容易地检测到的差异类型.然而,他们受到光线波动和摄影不精确的影响,我需要一个更宽松/更聪明的算法.

如您所见,如果重叠,图像不一定完美排列.

这个问题被标记为语言无关,因为我希望答案指向相关算法,但是如果它们存在,我也会对当前的实现感兴趣,特别是在Java,Ruby或C.

language-agnostic image-processing computer-vision

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

每个线程不同的数据库连接,相同的型号

我希望能够在不同的线程中连接到不同的数据库,并在每个数据库中查询相同的模型.例如,没有线程,我可以做类似的事情:

# given 'db1' and 'db2' are rails environments with connection configurations
['db1', 'db2'].each do |db|
  Post.establish_connection(db)

  Post.where(title: "Foo") 
end
Post.establish_connection(Rails.env)
Run Code Online (Sandbox Code Playgroud)

这将遍历两个数据库并查找每个数据库中的帖子.我需要能够使用线程并行执行此操作,例如:

['db1', 'db2'].each do |db|
  threads = Thread.new do
    Post.establish_connection(db)

    Post.where(title: "Foo")
  end 
end
threads.join
Post.establish_connection(Rails.env)
Run Code Online (Sandbox Code Playgroud)

但很明显,使用全局Post类在每个线程中建立一个新的连接池不是线程安全的.

我想要做的是在每个线程中建立一个新的连接池.我到目前为止:

['db1', 'db2'].each do |db|
  threads = Thread.new do
    conf = ActiveRecord::ConnectionAdapters::ConnectionSpecification.new(Rails.configuration.database_configuration[db], "mysql2_connection")
    pool = ActiveRecord::ConnectionAdapters::ConnectionPool.new(conf)
    pool.with_connection do |con|
      # problem is, I have this con object but using the Post class still uses the thread's default connection.
      Post.where(title: "Foo")
    end
  end …
Run Code Online (Sandbox Code Playgroud)

activerecord multithreading ruby-on-rails

6
推荐指数
0
解决办法
927
查看次数

Rails 装饰器,覆盖 Rails 引擎

我正在编写一些装饰器来覆盖此处所述的 Rails 引擎。我正在尝试向引擎中的类添加一个简单的方法,这是我的代码:

# app/decorators/models/my_engine/user_decorator.rb

MyEngine::User.class_eval do
  def self.find_by_name_or_mis_id str
    where("CONCAT(#{table_name}.firstname, ' ', #{table_name}.surname) LIKE CONCAT('%', :s, '%') OR mis_id = :s", { s: str })
  end
end
Run Code Online (Sandbox Code Playgroud)

我的应用程序找不到该方法,在 rails 控制台中我尝试对其进行测试:

# rails c
MyEngine::User.find_by_name_or_mis_id "John"
NoMethodError: undefined method `find_by_name_or_mis_id' for #<Class:0x007fcb85a45580>
Run Code Online (Sandbox Code Playgroud)

我可以通过require '/models/my_engine/user_decorator'在控制台上做来让它工作,为什么 rails 不接我的装饰器?

ruby-on-rails rails-engines

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

运行多个ruby进程(数据导入)

我有一个脚本从文件夹中的XML文件导入数据~/xml/.目前它按顺序运行,但随着导入文件数量的增加,它开始耗费太长时间.

我想并行运行脚本的多个副本,但是我可以设想两个脚本都开始处理相同文件的问题,如果脚本基本上不知道彼此的存在,你会如何解决这个问题呢?

数据库并发没有问题,因为每个导入文件都是针对不同的数据库.

ruby concurrency

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