标签: active-relation

Rails - 有没有办法为模型的 ActiveRecord::Relation 查询设置可重写的“默认”过滤器(即预运行类方法)?

我有一组记录正在从另一种格式推送到数据库中。根据我的记录所谓的唯一 ID,我推送到数据库中的一些记录正在回滚,因为它说它们是重复的。但我检查了一下,虽然它们非常相似,但记录中存在差异,这表明我在将数据放入数据库之前处理数据时出现了某种错误,或者是这个特定州政府在维护具有重复数据的数据库时出现了错误同一实体的记录。我现在还不确定。

我想将此官方记录/列表中所谓的“重复项”存储在我的数据库中,但用布尔列标记它们,该列随后可用于(基于零/真区分)过滤掉我的所有 ActiveRecord默认情况下查询该模型。

理想情况下,这将允许我做一些会导致如下行为的事情:

ModelName.all.count
#=> 500

ModelName.count
#=> 623

ModelName.include_alleged_duplicates.count
#=> 623
Run Code Online (Sandbox Code Playgroud)

有什么办法可以做到这一点而不破坏事情太严重吗?

ruby activerecord ruby-on-rails default-constructor active-relation

3
推荐指数
1
解决办法
1087
查看次数

排除积极关系中的条件,如何?

我正在寻找一种方法来做相反的事情:

Model.where(:name => 'julian')
Run Code Online (Sandbox Code Playgroud)

就像是 :

Model.where(:name => is_not('julian'))
Run Code Online (Sandbox Code Playgroud)

我找到了这篇文章.但是,find(:all, :conditions => {})现在已经在rails 3中弃用了,而且我认为必须有一种更清洁的方法.

有什么建议吗?

ruby activerecord ruby-on-rails active-relation ruby-on-rails-3

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

Ruby on Rails - 如何连接两个表?

我有两个处于一对多关系的表(主题和页面)。我想从主题和页面添加标准来解析 sql,但进度非常缓慢,并且经常遇到问题。我是 Rails 的新手,请帮忙。

class Subject < ActiveRecord::Base
  has_many :pages
end

class Page < ActiveRecord::Base
  belongs_to :subject 
end
Run Code Online (Sandbox Code Playgroud)

主题中的样本数据,在下面列出了三列:

id  name    level
1   'Math'  1
6   'Math'  2
...
Run Code Online (Sandbox Code Playgroud)

页中的示例数据,下面列出了列:

id  name                    subject_id
--  --------------------    ----------
2   Addition                1
4   Subtraction             1
5   Simple Multiplication   6
6   Simple Division         6
7   Hard Multiplication     6
8   Hard Division           6
9   Elementary Divsion      1
Run Code Online (Sandbox Code Playgroud)

鉴于我不知道subject.id,我只知道主题名称和级别以及页面名称。这是我想要生成的 sql(或类似的东西,可以达到相同的结果):

select subjects.id, subjects.name, pages.id, pages.name from subjects, pages
 where subjects.id = pages.subject_id
   and subjects.name = 'Math' …
Run Code Online (Sandbox Code Playgroud)

join active-relation ruby-on-rails-3

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

活动关系中的Ruby on Rails错误,NoMethodError:#ActiveRecord :: Relation:0x00000002ab5908的未定义方法'methodname'

这是两个具有1对1关联的模型的代码

class User < ActiveRecord::Base
  has_one :e_user
  validates_presence_of :first_name
  validates_presence_of :last_name
  validates :password, presence: true, :length => { :minimum => 6}
  validates_uniqueness_of :email, :message => ": This email is already registered!"
  validates_presence_of :email  
end
Run Code Online (Sandbox Code Playgroud)

以下是第二个型号:

class EUser < ActiveRecord::Base
  belongs_to : user
end
Run Code Online (Sandbox Code Playgroud)

当我去rails控制台并从db获取用户时,通过这样做

a = User.where(:id => 1)
Run Code Online (Sandbox Code Playgroud)

我有一个用户.现在我想让e_user与a相关联(如果它应该返回它或返回null),但是当我在控制台中键入a.EUser时出现错误消息,错误是

NoMethodError: undefined method `EUser' for  #<ActiveRecord::Relation:0x00000002ab5908>from /home/faraz/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.1.1/lib/active_record/relation.rb:459:in `method_missing'
from (irb):3
from /home/faraz/.rvm/gems/ruby-1.9.3-p448/gems/railties-3.1.1/lib/rails/commands/console.rb:45:in `start'
from /home/faraz/.rvm/gems/ruby-1.9.3-p448/gems/railties-3.1.1/lib/rails/commands/console.rb:8:in `start'
from /home/faraz/.rvm/gems/ruby-1.9.3-p448/gems/railties-3.1.1/lib/rails/commands.rb:40:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'
Run Code Online (Sandbox Code Playgroud)

问候

ruby-on-rails model-associations active-relation rails-activerecord

1
推荐指数
1
解决办法
6808
查看次数