Tag: activerecord

如何最好地处理与ActiveRecord的每个模型数据库连接?

我希望以规范的方式来做到这一点。 我的谷歌搜索已经缩短了。 我有一个ActiveRecord模型应该映射到不同于应用程序其余部分的数据库。 我想将新配置存储在database.yml文件中。 我知道应该调用establish_connection,但是不清楚在哪里。 这是我到目前为止所得到的,它不起作用: class Foo < ActiveRecord::Base establish_connection(('foo_' + ENV['RAILS_ENV']).intern) end

查找存在关联记录的位置

如何仅选择那些具有关联标记记录的员工? 换句话说,仅选择具有与之关联的一个或多个标记记录的员工记录。 class Employee < ActiveRecord::Base has_and_belongs_to_many :tags end class Tag < ActiveRecord::Base has_and_belongs_to_many :employees end 下面的查询(这是错误的)将让你们了解我正在尝试做什么。 Employee.includes(:tags).where(“tags.id != nil”)

有没有办法validationActiveRecord上的特定属性而不首先实例化对象?

例如,如果我有一个用户模型并且我只需要validation登录(这可以通过ajaxvalidation表单时发生),如果我使用User模型中定义的相同模型validation而不实际实例化User实例,那将会很棒。 所以在控制器中,我可以编写类似的代码 User.valid_attribute?(:login, “login value”) 无论如何我能做到吗?

ActiveRecord 3.1.0多个数据库

我正在尝试将ActiveRecord gem升级到最新的3.1.0版本并看到很多exception被提出,我认为这是由于我们如何处理多个数据库。 对于我们的每个数据库,我们指定一个单独的基类,它inheritance自ActiveRecord::Base ,并在那里调用establish_connection 。 没有跨数据库关系。 到目前为止,这对我们来说工作得很好。 升级到ActiveRecord 3.1.0后,我看到它在遍历关系时失败并出现ActiveRecord::ConnectionNotEstablishedexception(即它将成功从数据库中提取单个实体或一组实体,但在导航到相关类时失败)。 回溯的顶行是C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.1.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:410:in ‘retrieve_connection’ ,所以我挖了一下这个。 该方法定义如下: def retrieve_connection(klass) #:nodoc: pool = retrieve_connection_pool(klass) (pool && pool.connection) or raise ConnectionNotEstablished end 我的简单测试( puts Customer.first.address )调用retrieve_connection 3次。 使用Customer作为klass参数两次,使用ActiveRecord::Base作为参数一次 – 因为没有因为没有为ActiveRecord::Base调用establish_connection而失败。 那么实际的问题是 – 在ActiveRecord中有一种新的推荐方法来处理多个数据库连接吗? 如果是这样,它是什么? 如果没有,可能导致这个问题的原因是什么?

如何在ARel中使用CONCAT()等函数?

有没有办法让ARel写入(清理,可能是别名等)列名到CONCAT()和其他SQL函数中? 以下是使用AVG()的方法 … ?> name = Arel::Attribute.new(Arel::Table.new(:countries), :name) => # population = Arel::Attribute.new(Arel::Table.new(:countries), :population) => # Country.select([name, population.average]).to_sql => “SELECT `countries`.`name`, AVG(`countries`.`population`) AS avg_id FROM `countries`” (是的,我知道avg_id在每一行都是一样的,只是试图说明我的问题) 那么如果我想要一个不同的function呢? ?> Country.select(xyz).to_sql # Arel::Concat.new(name, population) or something? => “SELECT CONCAT(`countries`.`name`, ‘ ‘, `countries`.`population`) AS concat_id FROM `countries`” 谢谢!

Rails – AciveRecord使用:dependent =>:在条件下销毁

根据条件销毁对象的所有依赖项的最佳/干燥方法是什么。 ? 例如: class Worker :destroy has_many :coworkers , :dependent => :destroy has_many :company_credit_cards, :dependent => :destroy end 条件将在Destroy上: if self.is_fired? #Destroy dependants records else # Do not Destroy records end 有没有办法在依赖条件下使用Proc。 我已经找到了单独销毁家属的方法,但这对于进一步的关联来说并不是干燥和灵活的, 注意:我已经编写了示例..而不是实际的逻辑

Rails 3连接 – 仅选择某些列

以下是评论与用户之间的关系。 每个评论都有一个用户,所以我在下面的代码中构建了一个联接。 我想知道如何构建此代码只包括连接中的特定列。 我不需要所有用户信息。 只是first_name。 有什么建议。 现行代码: @comments = Comment.where(:study_id => @study.id).joins(:user)

无法使用ssh tunnel和activerecord连接到远程数据库

我在使用以下脚本时遇到了一些麻烦: require ‘rubygems’ require ‘active_record’ require ‘net/ssh/gateway’ gateway = Net::SSH::Gateway.new(‘myserver.com’, ‘myuser’, :password => “mypass”) puts “true” if gateway.active? p = gateway.open(‘127.0.0.1’, 3306, 3307) class MyClass “mysql”, :host => “127.0.0.1”, :username => “db_user”, :password => “db_pass”, :database => “mydb_production”, :port => 3307 ) end puts MyClass.all.size gateway.shutdown! 当我运行脚本时,它只是挂起,除非我删除activerecord查询。 我知道我可以使用隧道连接,因为我可以从命令创建隧道,如下所示: ssh -f myuser@myserver.com -L 3307/127.0.0.1/3306 -N 如果我跑: […]

如何从YAML文件加载一些ActiveRecord模型并将其保存到数据库?

我正在尝试将一些查找表数据保存到YAML文件中,以便稍后当我需要在另一台机器上设置我的应用程序时,我可以将数据作为种子数据加载。 数据就像选择选项一样,而且几乎可以设置,因此不必担心序列化和反序列化之间的实时数据变化。 我输出了这样的数据…… file = File.open(“#{RAILS_ROOT}/lib/tasks/questions/questions.yml”, ‘w’) questions = Question.find(:all, :order => ‘order_position’) file << YAML::dump(questions) file.close() 我可以像这样加载文件…… questions = YAML.load_file(‘lib/tasks/questions/questions.yml’) 但是,当我尝试保存问题时,我收到此错误… >> questions[0].save NoMethodError: undefined method `save’ for # 这样做的正确方法是什么?

为Rails 3.1.1关闭详细的sql / ActiveRecord

虽然SQL / ActiveRecord调用的详细function在大多数情况下都很有用,但我希望在我进行循环的情况下将其关闭。 有没有办法把它关掉? irb(main):055:0> City.first ←[1m←[35mCity Load (1.0ms)←[0m SELECT `cities`.* FROM `cities` LIMIT 1 => #