标签: ruby

Uniq by Ruby中的object属性

选择数组中对于一个或多个属性唯一的对象的最优雅方法是什么?

这些对象存储在ActiveRecord中,因此使用AR的方法也可以.

ruby arrays ruby-on-rails unique

118
推荐指数
7
解决办法
5万
查看次数

如何更改哈希值?

我想value用哈希替换每个哈希value.some_method.

例如,对于给定的简单哈希:

{"a" => "b", "c" => "d"}` 
Run Code Online (Sandbox Code Playgroud)

每个值都应该是.upcased,所以它看起来像:

{"a" => "B", "c" => "D"}
Run Code Online (Sandbox Code Playgroud)

我试过#collect,#map但总是把数组拿回来.有一种优雅的方式来做到这一点?

UPDATE

该死的,我忘记了:哈希是一个不应该改变的实例变量.我需要一个带有更改值的新哈希,但是不希望显式定义该变量,然后遍历填充它的哈希.就像是:

new_hash = hash.magic{ ... }
Run Code Online (Sandbox Code Playgroud)

ruby syntax hash

118
推荐指数
6
解决办法
10万
查看次数

检查Ruby对象是否是布尔值

似乎无法找到如何轻松检查对象是否是布尔值.Ruby中有这样的东西吗?

true.is_a?(Boolean)
false.is_a?(Boolean)
Run Code Online (Sandbox Code Playgroud)

现在我正在这样做,并希望缩短它:

some_var = rand(1) == 1 ? true : false
(some_var.is_a?(TrueClass) || some_var.is_a?(FalseClass))
Run Code Online (Sandbox Code Playgroud)

ruby typechecking

118
推荐指数
6
解决办法
10万
查看次数

如何使用Capybara选择下拉选项

我正在尝试使用Capybara(2.1.0)从下拉菜单中选择一个项目.

我想按编号选择(意思是选择第二个,第三个等选项).

我用Google搜索疯狂尝试各种各样的东西,但没有运气.

我可以通过使用值来选择它:

 find("option[value='4c430d62-f1ba-474f-8e8a-4452c55ea0a8']").click
Run Code Online (Sandbox Code Playgroud)

但我不想使用那种方法b/c值会改变,这将使我的测试变得脆弱.

下拉列表的HTML是:

<td class="value">
    <select name="organizationSelect" id="organizationSelect" class="required">
     <option value="NULL">Choose...</option>
     <option value="4c430d62-f1ba-474f-8e8a-4452c55ea0a8">&nbsp;Institution1</option>
     <option value="e1a4efa7-352d-410a-957e-35c8a3b92944">&nbsp;Institution / test</option>
    </select>
</td>
Run Code Online (Sandbox Code Playgroud)

我也试过这个:

  option = find(:xpath, "//*[@id='organizationSelect']/option[2]").text  
  select(option, :from => organizationSelect)
Run Code Online (Sandbox Code Playgroud)

但它会导致此错误:

Ambiguous match, found 2 elements matching option "Institution" (Capybara::Ambiguous)
Run Code Online (Sandbox Code Playgroud)

那么如何从下拉列表中选择第一个,第二个,第三个等选项(使用Capybara)?

ruby capybara selenium-webdriver

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

xxx的副本已从模块树中删除但仍处于活动状态

我很确定错误与TenantIdLoader模块的实际内容无关.相反,它与ActiveSupport依赖关系有关.

我似乎无法克服这个错误.从我读过的内容来看,这是因为要么ActiveRecord::Base正在重新Company::TenantIdLoader加载,要么正在重新加载,而且它在某种程度上没有进行通信.请帮忙!我真的希望能够升级到Rails 4.2.

编辑

我现在已经知道这是因为我正在引用Tenant哪些是自动重新加载的.我需要能够实际引用该课程,所以有人知道如何解决这个问题吗?

配置/ application.rb中

config.autoload_paths += %W( #{config.root}/lib/company )
Run Code Online (Sandbox Code Playgroud)

配置/初始化/ company.rb

ActionMailer::Base.send(:include, Company::TenantIdLoader)
Run Code Online (Sandbox Code Playgroud)

LIB /公司/ tenant_id_loader.rb

module Company
  module TenantIdLoader

    extend ActiveSupport::Concern

    included do
      cattr_accessor :tenant_dependency
      self.tenant_dependency = {}

      after_initialize do
        self.tenant_id = Tenant.active.id if self.class.tenant_dependent? and self.new_record? and Tenant.active.present? and !Tenant.active.zero?
      end
    end

    # class methods to be mixed in
    module ClassMethods

      # returns true if this model's table has a tenant_id
      def tenant_dependent?
        self.tenant_dependency[self.table_name] ||= …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails ruby-on-rails-4

118
推荐指数
3
解决办法
4万
查看次数

什么时候使用nil,空白,空?

是否有关于如何区分任何指引.nil?,.blank?.empty?

我一般总是很困惑何时在我的应用程序中使用它们,因为它们似乎都意味着相同但具有不同的含义.

有没有人在血淋淋的细节上有任何备忘单?

ruby ruby-on-rails

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

Rails中的pluck和collect之间有什么区别?

这是两个示例代码.

第一个collect:

User.first.gifts.collect(&:id)
Run Code Online (Sandbox Code Playgroud)

第二个pluck:

User.first.gifts.pluck(:id)
Run Code Online (Sandbox Code Playgroud)

他们在表现或其他方面有什么不同吗?

ruby ruby-on-rails rails-activerecord

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

如果在Ruby中使用File类不存在目录,如何创建目录?

我有这样的声明:

File.open(some_path, 'w+') { |f| f.write(builder.to_html)  }
Run Code Online (Sandbox Code Playgroud)

哪里

some_path = "somedir/some_subdir/some-file.html"
Run Code Online (Sandbox Code Playgroud)

我希望发生的是,如果没有所谓的目录somedirsome_subdir或两者的路径,我希望它自动地创建它.

我怎样才能做到这一点?

ruby

117
推荐指数
5
解决办法
6万
查看次数

在EACH循环中查找当前索引(Ruby)

可能重复:
Ruby中的每个自动计数器?

我想在每个循环中查找当前索引.我该怎么办?

X=[1,2,3]

X.each do |p|
 puts "current index..."
end 
Run Code Online (Sandbox Code Playgroud)

ruby foreach

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

Rails 4:未在生产中加载的资产

我正在尝试将我的应用程序投入生产,图像和css资产路径无法正常工作.

这是我目前正在做的事情:

  • 图片资产位于/app/assets/images/image.jpg中
  • 样式表位于/app/assets/stylesheets/style.css中
  • 在我的布局中,我像这样引用css文件: <%= stylesheet_link_tag "styles", media: "all", "data-turbolinks-track" => true %>
  • 在重新启动独角兽之前,我运行RAILS_ENV=production bundle exec rake assets:precompile并且它成功了,我在public/assets目录中看到了指纹文件.

当我浏览到我的网站时,我收到404找不到错误mysite.com/stylesheets/styles.css.

我究竟做错了什么?

更新: 在我的布局中,它看起来像这样:

<%= stylesheet_link_tag    "bootstrap.min", media: "all", "data-turbolinks-track" => true %>
<%= stylesheet_link_tag    "styles", media: "all", "data-turbolinks-track" => true %>
<%= javascript_include_tag "application", "data-turbolinks-track" => true %>
Run Code Online (Sandbox Code Playgroud)

生成源是这样的:

<link data-turbolinks-track="true" href="/stylesheets/bootstrap.min.css" media="all" rel="stylesheet" />
<link data-turbolinks-track="true" href="/stylesheets/styles.css" media="all" rel="stylesheet" />
<script data-turbolinks-track="true" src="/assets/application-0c647c942c6eff10ad92f1f2b0c64efe.js"></script>
Run Code Online (Sandbox Code Playgroud)

看起来Rails没有正确地查找已编译的css文件.但是为什么它适用于javascripts(注意/assets/****.js路径)是非常令人困惑的.

ruby ruby-on-rails asset-pipeline ruby-on-rails-4

116
推荐指数
6
解决办法
11万
查看次数