小编Pie*_*ois的帖子

如何按字母顺序对字符串的字符进行排序?

对于Array,有一种很好的sort方法来重新排列元素序列.我想为String实现相同的结果.

例如,我有一个字符串str = "String",我想用一个简单的方法按字母顺序对它进行排序"ginrSt".

是否有本地方式来启用此功能,还是应该包含mixins Enumerable

ruby sorting string

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

我应该如何在哈希上使用each_with_object?

我想each_with_object在哈希上使用,但无法弄清楚我应该如何使用它.这是我有的:

hash = {key1: :value1, key2: :value2}
hash.each_with_object([]) { |k, v, array| array << k }

NoMethodError: undefined method `<<' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)

是否可以each_with_object在哈希上使用?如果是,语法是什么?

ruby

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

无法找到字段"名称"(Capybara :: ElementNotFound)

我正在尝试使用capybara + rspec并得到此错误:无法找到字段"Name"(Capybara :: ElementNotFound)

这是我的表格:

%h2 Sign up
= simple_form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => {:class => 'form-vertical' }) do |f|
  = f.error_notification
  = display_base_errors resource
  = f.input :name, :autofocus => true
  = f.button :submit, 'Sign up', :class => 'btn-primary'
= render "devise/shared/links"
Run Code Online (Sandbox Code Playgroud)

这是我的user_steps.rb

When /^I sign up with valid user data$/ do
  create_visitor
  sign_up
end

def create_visitor
  @visitor ||= { :name => "Test visitor"}
end

def sign_up
  visit '/users/sign_up'
  fill_in "Name", :with => @visitor[:name]
  click_button …
Run Code Online (Sandbox Code Playgroud)

rspec capybara ruby-on-rails-3

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

使用Devise,Doorkeeper和OAuth2令牌进行API和应用程序身份验证

我有桌面应用程序和移动应用程序.我想为两个"设备"使用相同的rails应用程序.换句话说,我希望移动应用程序在桌面应用程序上请求内容.

我使用Devise进行身份验证(电子邮件+密码).我在桌面应用程序上实现了Doorkeeper,以便为我的移动应用程序生成Oauth2令牌.

这是我的问题:

我在桌面应用程序控制器中设置了before_filters以保护它们.

  • 我不确定移动应用程序应如何与Devise共享OAuth2令牌以便进行身份验证并访问受保护的控制器?

事实上,现在,门卫应该使用doorkeeper_for :all代码检查控制器中的移动令牌.但要做到这一点,我必须无法设计保护before_filter :authenticate_user!......

我是否应该在设计中保存oauth令牌?

我误解了移动应用程序应该如何使用devise和OAuth2 protocole进行身份验证?

谢谢

api ruby-on-rails oauth devise ruby-on-rails-3

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

Ruby:Struct vs Initialize

使用Struct与定义initialize方法有哪些优缺点?

我已经可以看到它涉及更少的代码不是在错过参数时提高:

使用struct:

class Fruit < Struct.new(:name)
end

> Fruit.new.name
 => nil
> Fruit.new('apple').name
 => "apple"
Run Code Online (Sandbox Code Playgroud)

使用初始化:

class Fruit
  attr_accessor :name

  def initialize(name)
    @name = name
  end
end

> Fruit.new.name
ArgumentError: wrong number of arguments (0 for 1)
> Fruit.new('apple').name
 => "apple"
Run Code Online (Sandbox Code Playgroud)

你的想法是什么 ?您是否Struct经常在项目中使用?

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

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

更新集合中的大量记录

我现在收集了TimeSheet几千条记录.这最终将在一年内增加到3亿条记录.在这个集合中,我嵌入了来自另一个集合的几个字段,Department其中大部分都不会获得任何更新,并且很少会更新某些记录.我很少说一年只有一次或两次,也不是所有记录,只有不到1%的记录.

一旦创建了一个部门,就不会有任何更新,即使有更新,也会在最初完成(当TimeSheet中的相关记录不多时)

现在如果有人在一年后更新一个部门,在最糟糕的情况下,收集的机会总共TimeSheet将有大约3亿条记录,并且该部门的大约500万条匹配记录会更新.更新查询条件将位于索引字段上.

由于这次更新非常耗时并且会产生锁定,我想知道有没有更好的方法呢?我正在考虑的一个选项是通过添加额外条件来批量运行更新查询UpdatedDateTime> somedate && UpdatedDateTime < somedate.

其他详情:

单个文档大小可以是大约3或4 KB我们有一个包含三个副本的副本集.

还有其他更好的方法吗?您如何看待这种设计?如果我给出的数字不像下面那么你觉得怎么样?

1)更新查询的1亿条记录和100,000条匹配记录

2)更新查询总计1000万条记录和10,000条匹配记录

3)更新查询总计100万条记录和1000条匹配记录

注意:集合名称departmenttimesheet它们的目的是虚构的,而不是真正的集合,但我给出的统计数据是真实的.

mongodb

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

覆盖rake release任务以使用Gemfury

我在Gemfury上托管一个私有宝石,并希望覆盖rake release任务以推送到我的Gemfury私有URL而不是Rubygems.

我想保留Git标签的创建.

我应该开始的任何想法?

这是我的Rakefile的样子:

require 'bundler/gem_tasks'
require 'rspec/core/rake_task'

RSpec::Core::RakeTask.new(:spec)

task default: :spec
task test:    :spec
Run Code Online (Sandbox Code Playgroud)

gem rubygems ruby-on-rails rakefile

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

在docker alpine上安装软件包时不满意的限制

我正在构建一个基于的docker镜像ruby:2.3-alpine.我需要为我的rails应用程序安装几个软件包才能正常运行.不幸的是,高山存储库中不存在以下包.

安装它们的方法是什么?

$ uname -a
Linux 50642453afd5 4.1.17-boot2docker #1 SMP Thu Feb 11 08:12:31 UTC 2016 x86_64 Linux
$ apk add iceweasel
ERROR: unsatisfiable constraints:
  iceweasel (missing):
    required by: world[iceweasel]
Run Code Online (Sandbox Code Playgroud)

要安装的软件包:

  • libav工具
  • 的xfonts基
  • 中的xfonts-75dpi
  • iceweasel

docker alpine-linux

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

Rspec:如何存根私有方法?

这是错误:

private method `desc' called for #<Array:0x0000010532e280>
Run Code Online (Sandbox Code Playgroud)

规格:

describe SubjectsController do  
  before(:each) do
    @subject = mock_model(Subject)
  end

    describe "#0002 - GET #index" do
    before(:each) do        
      subjects = [@subject, mock_model(Subject), mock_model(Subject)]
      Subject.stub!(:all).and_return(subjects)
      Subject.all.stub!(:desc).and_return(subjects)
      get :index
    end

    it { response.should be_success }
    it { response.should render_template("index") }
  end
end
Run Code Online (Sandbox Code Playgroud)

和控制器:

def index
  @subjects = Subject.all(conditions: {company_id: current_user.company.id}).desc(:created_at)
end
Run Code Online (Sandbox Code Playgroud)

我不知道如何解决这个问题,有人可以帮个忙吗?你能否就如何测试这种方法给我建议?谢谢.

rspec ruby-on-rails rspec2

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

Inno Setup:也排除目录及其文件

我在Inno Setup中使用"Exclude"标志,以便根据用户的体系结构从安装中排除子目录名"Bin32"或"Bin64".

我想要的是不要安装无用文件夹及其所有文件和子目录.

这是我目前的规则:

[Files]
Source: "Z:\Work\temp\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

; Exclude
Source: "*"; Excludes: "\Bin64"; DestDir: "{app}"; Flags: recursesubdirs; Check: not Is64BitInstallMode
Source: "*"; Excludes: "\Bin32"; DestDir: "{app}"; Flags: recursesubdirs; Check: Is64BitInstallMode
Run Code Online (Sandbox Code Playgroud)

首先,我不太明白"*"在排除规则的开头是什么意思?其次,它适用于Bin32/64文件夹内的所有子目录,但文件仍然安装,我无法找到不安装它们的方法...

谢谢.

inno-setup

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