我有一个对象数组,我们称之为Indicator.我想def self.subjects在这个数组上运行Indicator类方法(变种类,范围等).我知道在一组对象上运行类方法的唯一方法是让它们成为ActiveRecord :: Relation.所以我最终要求添加一个to_indicators方法Array.
def to_indicators
# TODO: Make this less terrible.
Indicator.where id: self.pluck(:id)
end
Run Code Online (Sandbox Code Playgroud)
有时我会链接相当多的这些范围来过滤类方法中的结果.所以,即使我在ActiveRecord :: Relation上调用一个方法,我也不知道如何访问该对象.我只能通过它来获取它的内容all.但是all是一个数组.那么我必须将该数组转换为ActiveRecord :: Relation.例如,这是其中一种方法的一部分:
all.to_indicators.applicable_for_bank(id).each do |indicator|
total += indicator.residual_risk_for(id)
indicator_count += 1 if indicator.completed_by?(id)
end
Run Code Online (Sandbox Code Playgroud)
我想这可以归结为两个问题.
where每次都做.def self.subjectsActiveRecord :: Relation上运行类型方法时,如何访问ActiveRecord :: Relation对象本身?谢谢.如果我需要澄清任何事情,请告诉我.
我在Ruby 1.9.2上有一个Rails 3rc应用程序工作正常,但Bundler在我的项目目录中不断创建一个名为"bandsintown"的文件夹(bandsintown是我使用的gem).据我所知,该文件夹中包含了我的所有宝石.我很确定这从未发生过.这是正常的行为吗?
我认为这可能会干扰运行测试.我得到一个"命令失败并显示状态(1)"错误,然后它几次提到"bandsintown"文件夹.
我觉得奇怪的是Bundler将文件夹命名为"bandsintown",即使我在gemfile中注释掉了这个gem.在那个文件夹中有一个"ruby"文件夹,在"ruby"文件夹中有一个"1.9.1"文件夹.当我使用1.9.2时,我不明白为什么它说1.9.1.1.9.1文件夹里面有bin,bundler,cache,doc,gems和specification文件夹.
我用所有相同的宝石制作了一个testapp并进行了捆绑安装.它不会创建一个包含所有宝石的新文件夹.
无论如何,我的应用程序工作正常,但我很感激,如果有人可以帮助我在这里.如果我遗漏任何需要知道的信息,请告诉我.谢谢.
我的应用程序在生产中非常完美 - 至少是网站的一部分.当我通过SSH连接到我的VPS并执行"rails c RAILS_ENV = production"时,问题才会出现.控制台在开发模式下工作正常.
我之前遇到过这个问题(或者至少有一个看起来像这个问题)并通过向database.yml添加"reconnect:true"来解决这个问题 - 但这次没有修复它.这是错误输出的开始:
/home/tour/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.0/lib/active_record/connection_adapters/abstract/connection_specification.rb:62:in `establish_connection': RAILS_ENV=production database is not configured (ActiveRecord::AdapterNotSpecified)
from /home/tour/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.0/lib/active_record/connection_adapters/abstract/connection_specification.rb:55:in `establish_connection'
from /home/tour/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.0/lib/active_record/railtie.rb:59:in `block (2 levels) in <class:Railtie>'
from /home/tour/.rvm/gems/ruby-1.9.2-p0/gems/activesupport-3.0.0/lib/active_support/lazy_load_hooks.rb:36:in `instance_eval'
from /home/tour/.rvm/gems/ruby-1.9.2-p0/gems/activesupport-3.0.0/lib/active_support/lazy_load_hooks.rb:36:in `execute_hook'
from /home/tour/.rvm/gems/ruby-1.9.2-p0/gems/activesupport-3.0.0/lib/active_support/lazy_load_hooks.rb:26:in `on_load'
from /home/tour/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.0/lib/active_record/railtie.rb:57:in `block in <class:Railtie>'
from /home/tour/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.0/lib/rails/initializable.rb:25:in `instance_exec'
from /home/tour/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.0/lib/rails/initializable.rb:25:in `run'
from /home/tour/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.0/lib/rails/initializable.rb:50:in `block in run_initializers'
Run Code Online (Sandbox Code Playgroud)
对于我的生产数据库设置:
production:
adapter: mysql
encoding: utf8
database: tour_production
pool: 5
username: [user]
password: [password]
socket: /var/run/mysqld/mysqld.sock
reconnect: true
Run Code Online (Sandbox Code Playgroud)
我无法理解为什么它通过乘客工作,但没有运气控制台.无论如何,我使用的是Rails 3,Ruby 1.9.2,Passenger和Nginx.
我一直在通过Runner做一些小事,这很烦人.我想解决这个问题.所以,谢谢你的帮助.
我在让MiniProfiler向我展示报告方面遇到了问题.我只是在Dev环境中,它应该一直显示它.添加?pp=help确实会显示帮助页面.在tmp/miniprofile中,有大量的mp_timers_文件.显然有些事情发生在那里.
起初我认为这是一个奇怪的CSS问题,就像我的导航栏覆盖它一样.我尝试加载没有CSS的页面,MiniProfile框仍然没有出现.
如果重要,我没有before_filter设置.但是,当我使用他们的文档中的简单文件时,它没有任何帮助.
我有一个应用程序在我的本地机器上完美运行,现在正在部署它.我有VPS全部设置,它也非常有效.我的问题来自无法启动delayed_job.我做了"ruby脚本/ delayed_job启动RAILS_ENV =生产",同时SSHd到应用程序,它返回"delayed_job:进程与pid 11547开始." 当我在htop中查找过程时,我找不到它.
所以我挖了一遍,读到Monit可以保持delayed_job继续.我把它设置了,希望我能以这种方式启动delayed_job.但是没有delayed_job.pid,所以我没有走得太远.我最终在其中设置了nginx和mysql,并且想完成设置delayed_job.缺少delayed_job.pid会妨碍.
当我通过SSH连接到应用程序并运行"rake jobs:work RAILS_ENV = production"时,一切正常.所以我很确定应用程序本身很好.
我正在使用collectiveidea的delayed_job.谢谢你的帮助.
我正在尝试使用复选框中的值填充数组.它在创建记录时工作得很好,但在编辑时验证失败.params看起来正确,这让我感到困惑:
"record"=>{... "type_array"=>["accounting"], ...}
Run Code Online (Sandbox Code Playgroud)
它与创建新记录时的参数看起来相同.在该领域New.html.erb,并Edit.html.erb也使用相同的标记.
Edit.html.erb
<div class="field">
<%= f.label :type_array, "What type of record?" %><br />
<% ["accounting", "agriculture", "automotive"].each do |type| %>
<%= check_box_tag 'record[type_array][]', type, (true if @record.type_list.include? type),
:id => type %>
<%= label_tag type, type.titleize, :class => type %><br />
<% end %>
</div>
Run Code Online (Sandbox Code Playgroud)
Record.rb的部分内容
validates :type_array, :presence => true
attr_accessor :type_array
attr_accessible :type_array
before_validation :set_type_list
private
def set_type_list
self.type_list = type_array.join ',' if type_array.present?
end
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?当我删除type_array验证并填写表单时,它的行为类似于type_array为空.沿着这条线的某个地方,它必定是丢失的东西.
我感谢任何帮助.
(旁注:如果有人有更好的方法来做复选框列表,请告诉我)
我试图在用户登录时将布局设置为"私有".如果我可以执行以下操作,那将是完美的:
layout 'private' if current_user
Run Code Online (Sandbox Code Playgroud)
除了它给出了这个错误:
undefined local variable or method `current_user' for ApplicationController:Class
Run Code Online (Sandbox Code Playgroud)
我也尝试在应用程序控制器中执行此操作:
before_filter :pick_the_layout
def pick_the_layout
if current_user
render :layout => "private"
else
render :layout => "public"
end
end
Run Code Online (Sandbox Code Playgroud)
这也没有运气,这是有道理的.谁能想到更好的方法来做到这一点?
activerecord ×3
ruby ×2
bundler ×1
console ×1
delayed-job ×1
gem ×1
layout ×1
monit ×1
mysql ×1
templates ×1
validation ×1