小编Ser*_*sev的帖子

ORDER BY LIMIT查询的MySQL索引用法

我正在使用超过2百万条记录的"用户"表.查询是:

SELECT * FROM users WHERE 1 ORDER BY firstname LIMIT $start,30
Run Code Online (Sandbox Code Playgroud)

"firstname"列已编入索引.获取第一页非常快,而获取最后一页非常慢.

我使用了EXPLAIN,结果如下:

对于

EXPLAIN SELECT * FROM `users` WHERE 1 ORDER BY `firstname` LIMIT 10000 , 30
Run Code Online (Sandbox Code Playgroud)

我越来越:

id  select_type     table   type    possible_keys   key     key_len     ref     rows    Extra
1   SIMPLE  users   index   NULL    firstname   194     NULL    10030 
Run Code Online (Sandbox Code Playgroud)

但对于

EXPLAIN SELECT * FROM `users` WHERE 1 ORDER BY `firstname` LIMIT 100000 , 30
Run Code Online (Sandbox Code Playgroud)

我越来越

id  select_type     table   type    possible_keys   key     key_len     ref     rows    Extra
1   SIMPLE  users   ALL     NULL …
Run Code Online (Sandbox Code Playgroud)

mysql

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

动态获取路径路径

我最近将一些模板从ERB转换为Haml.它大多变得更清洁,更好,但按钮定义开始变得很糟糕.

我想转换它

= link_to t('.new', :default => t("helpers.links.new")),
          new_intern_path,                                       
          :class => 'btn btn-primary' if can? :create, Intern    
Run Code Online (Sandbox Code Playgroud)

这样的事情

= new_button Intern
Run Code Online (Sandbox Code Playgroud)

我还有其他几个实体,Intern所以其他所有页面也会从中受益.

所以,我输入了这段代码

  def new_button(person_class)
    return unless can?(:create, person_class)

    new_route_method = eval("new_#{person_class.name.tableize}_path")

    link_to t('.new', :default => t("helpers.links.new")),
              new_route_method,                                       
              :class => 'btn btn-primary'
  end
Run Code Online (Sandbox Code Playgroud)

它按预期工作.我只是不确定那个eval电话(因为它是邪恶的,所有这一切).有一种更简单,更不邪恶的方式吗?

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

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

获取 MongoDB 文档中文档的键

除了遍历文档之外,还有什么方法可以获取 MongoDB 中特定文档的键列表?

即我想获取由返回的文档的密钥

db.users.find({username:'xyz@abc.com})
Run Code Online (Sandbox Code Playgroud)

是否有任何内联命令。如果没有,任何人都可以给出如何做的想法吗?

mongodb mongoid

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

从master,提交到另一个分支

我通常会为不同的代码段创建分支,但偶尔会忘记创建一个新的分支,并且所有内容都发生在主分支上.

我怎么能说git虽然我在主分支上,但这个提交是针对xyz分支的?

git github

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

Redis 如何与 Rails 和 Sidekiq 配合使用

问题:需要从 Rails 异步发送电子邮件。环境:Windows 7、Ruby 2.0、Rails 4.1、Sidekiq、Redis

设置完所有内容后,启动 Sidekiq 并启动 Redis,我可以通过监视器看到排队到 Redis 的邮件请求:

1414256204.699674 "exec"
1414256204.710675 "multi"
1414256204.710675 "sadd" "queues" "default"
1414256204.710675 "lpush" "queue:default" "{\"retry\":true,\"queue\":\"default\",\"class\":\"Sidekiq::Extensions::DelayedMailer\",\"args\":[\"---\\n- !ruby/class 'UserMailer'\\n- :async_reminder\\n- - 673\\n\"],\"jid\":\"d4024c0c219201e5d1649c54\",\"enqueued_at\":1414256204.709674}"
Run Code Online (Sandbox Code Playgroud)

但邮件程序方法似乎永远不会被执行。邮件未发送,也未显示任何日志消息。

Redis 如何知道要执行队列上的作业,以及是否需要在环境中设置其他内容才能知道应用程序驻留在何处?

Delayed_job 是更好的解决方案吗?

我在一个窗口中启动redis,在另一个窗口中启动bundle exec sidekiq,在第三个窗口中启动rails server。

Redis 队列中的项目如何被拾取并处理?sidekiq 是否既将内容放入 Redis 队列中,又检查是否添加了需要处理的内容?

ruby-on-rails actionmailer redis

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

使用Ruby将字符串转换为日期

我的日期是字符串,格式如下:23 Nov. 2014.当然,使用这样的表达式将此字符串转换为日期很容易:

Date.strptime(my_string, '%d %b. %Y')
Run Code Online (Sandbox Code Playgroud)

但是月份是5月还有一个问题 - 没有点,比如23 May 2014.我的表情破裂了.

有人可以帮忙解决这个问题吗?如何为我的案例制作通用表达方式?

ruby date strptime

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

时间戳是否需要可为空的 false 声明

创建 ActiveRecord 对象时,时间戳是否需要可为 null 的 false 声明。

t.timestamps null: false
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails

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

Ruby 中的百分比编码

在 Ruby 中,我得到了 'ä' 的百分比编码

require 'cgi'
CGI.escape('ä')
=> "%C3%A4"
Run Code Online (Sandbox Code Playgroud)

'ä'.unpack('H2' * 'ä'.bytesize)
=> ["c3", "a4"]
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

  1. 第一个操作的逆向是什么?不应该是

    ["c3", "a4"].pack('H2' * 'ä'.bytesize)
    => "\xC3\xA4"
    
    Run Code Online (Sandbox Code Playgroud)
  2. 对于我的应用程序,我需要将 'ä' 编码为“%E4”,它是 'ä'.ord 的十六进制值。有没有针对它的 Ruby 方法?

ruby percent-encoding

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

如何在 Ruby 中输出尾随零?

请考虑以下代码:

class Book
  def initialize (price)
   @price=price
  end

  def book_price
   puts "Price: #{@price}"
  end
end

book1=Book.new(19.60)
book1.book_price
Run Code Online (Sandbox Code Playgroud)

它始终返回“价格:19.6”而不是“价格:19.60”

我尝试过改变@price=price.to_f,但没有什么区别。如何保留尾随零而不转换为字符串?

ruby

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

递归(?)算法设计

我要求允许我的最终用户输入公式,就像电子表格一样.我有这样一个数组:

$table = array(
    1=>array(
            "id"=>1,
            "Name"=>"Regulating",
            "Quantity"=>"[2]Quantity+[3]Value",
            "Value"=>"[2]Cost"
        ),
...)
Run Code Online (Sandbox Code Playgroud)

第一级数组键的值始终与该数组中的id键相同.

列表示例如下:

id  Name        Quantity                Value
1   Regulating  [2]Quantity+[3]Value    [2]Cost
2   Kerbs       3                       6
3   Bricks      9                       7
4   Sausages    [3]Cost                 3
5   Bamboo      [4]Quantity             [7]Cost
6   Clams       [4]Quantity             NULL
7   Hardcore    [3]Quantity*0.5         12
8   Beetles     [6]Quantity*[4]Value    [2]Value
Run Code Online (Sandbox Code Playgroud)

数量和值键表示引用[id]和数量,值或成本的公式.

通过乘以价值和数量得出成本.

我在用:

preg_match_all("/\[(.*?)\]([A-Z]*[a-z]*)/", $string, $matches, PREG_SET_ORDER);
Run Code Online (Sandbox Code Playgroud)

它输出一个像这样的数组[1][Quantity]:

Array
(
    [0] => Array
        (
            [0] => [2]Quantity
            [1] => 2
            [2] => Quantity
        )

    [1] => Array
        (
            [0] …
Run Code Online (Sandbox Code Playgroud)

php algorithm recursion

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