选择数组中对于一个或多个属性唯一的对象的最优雅方法是什么?
这些对象存储在ActiveRecord中,因此使用AR的方法也可以.
我想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中有这样的东西吗?
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) 我正在尝试使用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"> Institution1</option>
<option value="e1a4efa7-352d-410a-957e-35c8a3b92944"> 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)?
我很确定错误与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) 是否有关于如何区分任何指引.nil?,.blank?和.empty??
我一般总是很困惑何时在我的应用程序中使用它们,因为它们似乎都意味着相同但具有不同的含义.
有没有人在血淋淋的细节上有任何备忘单?
这是两个示例代码.
第一个collect:
User.first.gifts.collect(&:id)
Run Code Online (Sandbox Code Playgroud)
第二个pluck:
User.first.gifts.pluck(:id)
Run Code Online (Sandbox Code Playgroud)
他们在表现或其他方面有什么不同吗?
我有这样的声明:
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)
我希望发生的是,如果没有所谓的目录somedir或some_subdir或两者的路径,我希望它自动地创建它.
我怎样才能做到这一点?
可能重复:
Ruby中的每个自动计数器?
我想在每个循环中查找当前索引.我该怎么办?
X=[1,2,3]
X.each do |p|
puts "current index..."
end
Run Code Online (Sandbox Code Playgroud) 我正在尝试将我的应用程序投入生产,图像和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路径)是非常令人困惑的.