标签: ruby

如何在没有O ^ 2问题的Ruby中找到一串二进制二进制文件的最接近对(汉明距离)?

我有一个包含大约100万个文档的MongoDB.这些文档都有一个字符串,表示一个1位和0位的256位bin,如:

0110101010101010110101010101

理想情况下,我想查询近二进制匹配.这意味着,如果两个文件具有以下数字.是的,这是汉明距离.

Mongo目前不支持此功能.所以,我不得不在应用程序层中这样做.

因此,鉴于此,我试图找到一种方法来避免在文档之间进行单独的汉明距离比较.这使得时间基本上不可能完成.

我有很多内存.并且,在ruby中,似乎有一个伟大的宝石(算法)可以创建许多树,我似乎没有任何工作(还)可以减少我需要做的查询数量.

理想情况下,我想制作100万个查询,找到接近重复的字符串,并能够更新它们以反映这一点.

任何人的想法将不胜感激.

ruby kdtree mongodb hamming-distance

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

ActiveRecord验证:关联的唯一性

我需要执行验证以确保公司内只有一个用户可以存在于给定类别中.

  validates  :user_id, :uniqueness => {:scope => [:category, :company_id], :message => "already exists"}
Run Code Online (Sandbox Code Playgroud)

除了在:user_id密钥上设置错误消息之外,这个工作正常.

我怎么能这样做但是在:user键上设置错误(validates :user给出错误)?

ruby validation activerecord ruby-on-rails

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

将Ruby gem加载到用户定义的命名空间中

给定一个定义顶级类的gem,它与我编写的一些代码冲突,是否可以以这样的方式要求gem,使其所有类都分组在我可以定义的模块中?例如,如果unsafe_gem定义了一个类:

class Word
  # ... some code
end
Run Code Online (Sandbox Code Playgroud)

我需要这样的东西:

class Word
  # My word class.
end

module SafeContainer
  # This obviously doesn't work
  # (i.e. the gem still defines ::Word).
  require 'unsafe_gem'
end
Run Code Online (Sandbox Code Playgroud)

这样我就可以区分:

Word.new # => The class I defined.
SafeContainer::Word.new # => The class defined by the gem.
Run Code Online (Sandbox Code Playgroud)

一些进一步的细节:我的代码(例如'Word'类)已经包装在它自己的命名空间中.但是,我希望能够为用户提供启用"语法糖"形式的选项,这使得某些类可以在顶级命名空间下直接访问.但是,这会与我正在使用的一个宝石创建一个名称冲突,它定义了一个顶级类.目前提出的解决方案都不起作用,因为宝石实际上依赖于其全球定义的类; 因此,取消定义课程打破了宝石.当然,gem有多个文件,单独要求将其文件放入模块似乎是一个非常脆弱的解决方案.目前,我发现的唯一解决方法是:

begin
  # Require the faulty gem.
  require 'rbtagger'
rescue 
  # If syntactic sugar is enabled...
  if NAT.edulcorated?
    # Temporarily remove the sugar for the clashing class.
    Object.const_unset(:Word); …
Run Code Online (Sandbox Code Playgroud)

ruby gem namespaces

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

Ruby 1.9和Javascript regexp之间的差异

除了JavaScript的^,并$等同于Ruby的\A和\z,还有什么其他细微的差别是有两个正则表达式引擎之间?

我正在寻找相同的正则表达式可能表现不同的细微差别,例如/^abc$/将在Ruby中匹配:

123
abc
def
Run Code Online (Sandbox Code Playgroud)

但它在Javascript中不匹配.

javascript ruby regex

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

ArgumentError:参数数量错误(1表示2)

我是Rails,MVC和CRUD的新手,我正在尝试使用更新方法来更改帖子的投票数量.我的帖子控制器更新方法中有以下代码:

def update
    @post = Post.find(params[:id])

    if params[:vote] == 'up'
        @post.update_column(:ups => @post[:ups] + 1)
    elsif params[:vote] == 'down'
        @post.update_column(:downs => @post[:downs] + 1)
    end

    flash[:notice] = "Thanks for voting! This helps us determine important issues in our schools."

    redirect_to 'Posts#index'
end
Run Code Online (Sandbox Code Playgroud)

我的routes.rb中有以下代码:

OpenMCJC::Application.routes.draw do
  root :to => 'posts#index'
  resources :posts
  match '/posts/:id/:vote', :to => 'posts#update'
end
Run Code Online (Sandbox Code Playgroud)

导航到"/ posts/3/up"后,会抛出以下错误:

ArgumentError in PostsController#update

wrong number of arguments (1 for 2)
Run Code Online (Sandbox Code Playgroud)

根据页面的请求参数是这样的:

{"id"=>"3",
"vote"=>"up"}
Run Code Online (Sandbox Code Playgroud)

你能帮我弄清楚出了什么问题吗?

ruby routing ruby-on-rails crud

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

如何在我的数据库中存储哈希?

是否有Ruby或Activerecord方法可以在数据库字段中写入和读取哈希值?

我需要编写一个Web实用程序来接受POST数据并将其保存到数据库中,然后再以原始哈希形式从数据库中提取它.但理想情况下,不要"了解"结构是什么.换句话说,我的数据存储需要独立于任何特定的散列键集.

例如,有一次外部应用程序可能会POST到我的应用程序:

"user" => "Bill",
"city" => "New York"
Run Code Online (Sandbox Code Playgroud)

但另一次外部应用程序可能会POST到我的应用程序:

"company" => "Foo Inc",
"telephone" => "555-5555"
Run Code Online (Sandbox Code Playgroud)

因此,我的实用程序需要将任意哈希保存到text数据库中的字段,然后,稍后从已保存的内容重新创建哈希.

ruby hash activerecord

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

无法将nil转换为String

我不知道Ruby,但我的应用程序遇到了这个问题.有人可以帮帮我吗?

第7行上的ActionView :: TemplateError(无法将nil转换为String)

4:  <h3><span><%= opinion.opinion %></span>: <%= opinion.keywords.sort.join(' / ').upcase %> </h3>
5:  <div class="original">Estado original: <span class="pos"><%= opinion.opinion %></span></div>
6:  <%#= highlight(simple_format(highlight_ontology(opinion)), opinion.keywords, :highlighter => '<em>\1</em>') %>
7:  <%= simple_format(highlight_ontology(opinion)) %>
8:  <%= button_to_remote('POSITIVO', {:url => url_for(opinion), :method => :put, :with => '"opinion[opinion]=POSITIVE"' }, :class => :positive) %>
9:  <%= button_to_remote('OBJETIVO', {:url => url_for(opinion), :method => :put, :with => '"opinion[opinion]=OBJECTIVE"' }, :class => :objective) %>
10: <%= button_to_remote('NEGATIVO', {:url => url_for(opinion), :method => :put, :with => '"opinion[opinion]=NEGATIVE"' …
Run Code Online (Sandbox Code Playgroud)

ruby string null

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

开源ETL框架

我被要求对两个ETL框架进行原型设计.要求如下:

  • 开源
  • 适用于Linux
  • 保持
  • 可以在Web浏览器上查看日志(很高兴)
  • 用Perl,Python,Ruby或Java编写

原始文件可以是任何东西(excel,csv,html页面等).目标数据库是MySQL.

不要只是删除名称,请根据您的经验说明优缺点.

谢谢!

ruby python java perl etl

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

Rails.cache.fetch开发中的缓存

使用如下的Rails.cache.fetch甚至在我的开发环境中缓存(关闭缓存):

@boat_features = Rails.cache.fetch("boat_features", expires_in: 10.minutes) do
  BoatFeature.all
end
Run Code Online (Sandbox Code Playgroud)

有没有人遇到过这个?

ruby caching ruby-on-rails

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

以下划线开头的局部变量是不错的做法?

我刚刚进入Ruby并且来自Java和C/C++环境.

在编写Ruby中的第一个小项目时,我不知何故习惯了让所有局部变量以下划线开头.我想我的主要动机是更好的可读性和方法调用的区别.

原则上只有三种类型的变量($global,@instance和local),绝大多数变量都以下划线开头.我不确定,这是好还是坏.此外,在很多其他语言中,下划线将被替换为其他一些字符.

有没有关于变量命名的最佳实践,除了通常的CamelCase和/或下划线分开?专业"红宝石"的习惯是什么?当我选择领先的下划线时,我是否忽略了一些常规的Ruby惯例?


编辑
感谢所有的答案和建议.这对我帮助很大.


以下答案和评论的简短摘要
(适用于短期访客)

领先的下划线与:

  • 方法参数: def my_method(_my_arg)
  • 块参数:例如 my_array.each { |_x| puts _x}

所有其他局部变量没有前导下划线,因为来自JavaScript的程序员可能会对变量的预期行为感到困惑.

对于变量名和方法调用之间的视觉分离,强制自己在所有方法调用中使用" ("括号" )" 可能会显着提高可读性.

ruby naming-conventions

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