Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何获得具有不同where标准的多个关系_Ruby On Rails_Activerecord - Fatal编程技术网

Ruby on rails 如何获得具有不同where标准的多个关系

Ruby on rails 如何获得具有不同where标准的多个关系,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我有以下标题和项目类,希望获取所有仅为is_deleted=false的项目,并忽略is_enabled(或者获取true/false,因为is_enabled是一个布尔值): 但这似乎不起作用——也许只是一个语法问题 获取项目已启用状态的最佳方法是什么?我是否可以筛选我的项目,以确定是否启用了true或false?可能只是一种类似的方法,但最好将其作为关系的一部分: class Header < ActiveRecord::Base ... def all_items Item.wh

我有以下标题和项目类,希望获取所有仅为is_deleted=false的项目,并忽略is_enabled(或者获取true/false,因为is_enabled是一个布尔值):

但这似乎不起作用——也许只是一个语法问题

获取项目已启用状态的最佳方法是什么?我是否可以筛选我的项目,以确定是否启用了true或false?可能只是一种类似的方法,但最好将其作为关系的一部分:

class Header < ActiveRecord::Base
...
def all_items
  Item.where('header_id=? and is_deleted=false',self.id)
end
class头

thx对于任何帮助

一个选项可以通过使用范围:

class Header < ActiveRecord::Base
  scope :deleted, joins(:items) & Item.deleted
  scope :enabled, joins(:items) & Item.enabled    
  ## Other way to write the same thing:
  #scope :enabled, joins(:items).merge(Item.enabled)
end

class Item < ActiveRecord::Base
  scope :deleted, lambda { where("is_deleted=false") }
  scope :enabled, lambda { where("is_enabled=true ") }
end
使用此选项,您可以通过以下方式获得结果:
@header.deleted.items

看看,你可能会得到更合适的想法

class Header < ActiveRecord::Base
...
def all_items
  Item.where('header_id=? and is_deleted=false',self.id)
end
class Header < ActiveRecord::Base
  scope :deleted, joins(:items) & Item.deleted
  scope :enabled, joins(:items) & Item.enabled    
  ## Other way to write the same thing:
  #scope :enabled, joins(:items).merge(Item.enabled)
end

class Item < ActiveRecord::Base
  scope :deleted, lambda { where("is_deleted=false") }
  scope :enabled, lambda { where("is_enabled=true ") }
end
class Header < ActiveRecord::Base
  has_many :items, :order => 'position'

...
def deleted
  where('items.is_deleted=false')
end