标签: activerecord

ruby超级关键字

据我所知,super关键字调用一个方法,该方法与当前类的超类中的当前方法具有相同的名称.在autoload方法下面,有一个电话super.我想知道在哪个超类中我会找到一个具有相同名称的方法或者super这里要做的调用

module ActiveSupport
  module Autoload
    ...      
    def autoload(const_name, path = @@at_path)
      full = [self.name, @@under_path, const_name.to_s, path].compact.join("::")
      location = path || Inflector.underscore(full)

      if @@eager_autoload
        @@autoloads[const_name] = location
      end
      super const_name, location
    end
   .... 
  end
end

module ActiveRecord
  extend ActiveSupport::Autoload
  ...
  autoload :TestCase
  autoload :TestFixtures, 'active_record/fixtures'
end
Run Code Online (Sandbox Code Playgroud)

此代码来自rails master分支.非常感谢.

ruby activerecord ruby-on-rails

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

has_and_belongs_to_many,避免连接表中的欺骗

我有一套非常简单的HABTM模型

class Tag < ActiveRecord::Base 
   has_and_belongs_to_many :posts
end 

class Post < ActiveRecord::Base 
   has_and_belongs_to_many :tags

   def tags= (tag_list) 
      self.tags.clear 
      tag_list.strip.split(' ').each do 
        self.tags.build(:name => tag) 
      end
   end 
end 
Run Code Online (Sandbox Code Playgroud)

现在一切正常,除了我在Tags表中得到了大量的重复项.

我需要做些什么来避免标签表中的重复(基于名称)?

activerecord ruby-on-rails

57
推荐指数
7
解决办法
3万
查看次数

如何在Rails外的ruby脚本中使用ActiveRecord?

我有一个小的ruby脚本,我想使用ActiveRecord轻松访问数据库模型.最好的方法是什么?

ruby scripting activerecord ruby-on-rails

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

ActiveRecord serialize using JSON instead of YAML

I have a model that uses a serialized column:

class Form < ActiveRecord::Base
  serialize :options, Hash
end
Run Code Online (Sandbox Code Playgroud)

Is there a way to make this serialization use JSON instead of YAML?

serialization activerecord json yaml ruby-on-rails

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

如何使用Laravel的流畅查询构建器选择计数?

这是我使用流畅查询构建器的查询.

    $query = DB::table('category_issue')
        ->select('issues.*')
        ->where('category_id', '=', 1)
        ->join('issues', 'category_issue.issue_id', '=', 'issues.id')
        ->left_join('issue_subscriptions', 'issues.id', '=', 'issue_subscriptions.issue_id')
        ->group_by('issues.id')
        ->order_by(DB::raw('COUNT(issue_subscriptions.issue_id)'), 'desc')
        ->get();
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我通过连接表中的计数进行排序.这工作正常.但是,我希望这个计数随我的选择而返回.

这是我的原始续集查询,工作正常.

Select issues.*, COUNT(issue_subscriptions.issue_id) AS followers 
FROM category_issue JOIN Issues ON category_issue.issue_id = issues.id 
LEFT JOIN issue_subscriptions ON issues.id = issue_subscriptions.issue_id
WHERE category_issue.category_id = 1
GROUP BY issues.id
ORDER BY followers DESC
Run Code Online (Sandbox Code Playgroud)

如何使用Laravel的流畅查询构建器进行此选择?我知道我可以使用原始的SQL查询但我想尽可能避免这种情况.任何帮助将不胜感激,提前谢谢!

mysql activerecord fluent laravel eloquent

55
推荐指数
2
解决办法
10万
查看次数

如何确定是否已加载Rails关联?

有没有人知道确定Rails关联是否已被急切加载的方法?

我的情况:我有一个结果集,有时其中一个关联是急切加载的,有时它不是.如果它没有急切加载,那么我想使用ActiveRecord的查找查找关联.如果它是急切加载,我想使用检测.

例如,假设我的项目模型中有一个shipping_info对象的"has_many"数组.然后:

如果项目是急切加载的,最有效的负载是:

item.shipping_infos.detect { |si| si.region == "United States" }
Run Code Online (Sandbox Code Playgroud)

如果项目未加载,则最有效的加载是:

item.shipping_infos.where(region: "United States").first
Run Code Online (Sandbox Code Playgroud)

但除非我知道它是否是急切加载,否则我不知道要调用哪些代码来有效地获取记录.如果我在第一种方法没有急切加载时使用它,那么我必须查找超过必要的DB记录.如果我在急切加载时使用第二种方法,那么我的急切加载对象将被忽略.

activerecord ruby-on-rails eager-loading

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

使用find_or_create接受_ented_attributes_for?

我正在使用Rails的accepts_nested_attributes_for方法取得了巨大的成功,但是如果记录已经存在,我怎么能创建新的记录呢?

举例来说:

假设我有三个模型,团队,会员和玩家,每个团队都有很多玩家通过会员资格,玩家可以属于很多团队.然后,团队模型可以接受玩家的嵌套属性,但这意味着通过组合团队+玩家形式提交的每个玩家将被创建为新的玩家记录.

如果我只想以这种方式创建一个新的播放器记录,如果还没有同名的播放器,我应该怎么做呢?如果具有相同名称的玩家,没有新玩家记录应当建立,而是正确的玩家应该发现并用新的球队纪录有关.

forms validation activerecord ruby-on-rails

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

如何通过反射获得activerecord关联

对于普通列,您可以通过columns类方法获取它们.但是,如果foreign_key在关系方法中设置了选项,则可以将关联命名为完全不同的名称.例如,给定

class Post
  has_many :comments, :foreign_key => :message_id # this is a contrived example
end
Run Code Online (Sandbox Code Playgroud)

如果我这样做Post.column_names我可以得到message_id,但有没有办法得到comments

ruby reflection activerecord

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

Rails:基于关联值的ActiveRecord查询

我有2个型号.Report并且Server有一个belongs_to和has_many关系.我创建了一个使用的访问器方法delegate,允许Report找到它的关联Server.company_id.现在,我想运行一个查询Report,允许我查找ReportServer具有特定company_id属性5 的特定属性相关联的所有内容.

这是我的两个型号.是的,我知道当前的查询不起作用,因为Report没有属性company_id.

不,我不想存储company_id内部,Report因为该信息不属于Report.

报告

class Report < ActiveRecord::Base

 belongs_to :server

 delegate :company_id, :to => :server

    class << self

        def method(url, base_url)
            #Report.where(company_id: 5)
        end
    end

end
Run Code Online (Sandbox Code Playgroud)

服务器

class Server < ActiveRecord::Base

 attr_accessible :company_id

 has_many :reports

end
Run Code Online (Sandbox Code Playgroud)

ruby activerecord ruby-on-rails associations

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

如何在Ruby中取消定义类?

在Ruby中取消定义方法非常简单,我可以使用undef METHOD_NAME.

班级有类似的东西吗?我在MRI 1.9.2.

我必须取消定义ActiveRecord模型,运行两行代码,然后将模型恢复为原始形式.

问题是,我有一个模型Contact,我正在使用公司的API,并且碰巧他们有一些叫做的类Contact,而改变我的模型名称对我来说将是很多工作.

在这种情况下我该怎么办?

ruby activerecord ruby-on-rails-3

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