Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.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 获取未分类的对象有很多:通过_Ruby On Rails_Ruby_Has Many Through - Fatal编程技术网

Ruby on rails 获取未分类的对象有很多:通过

Ruby on rails 获取未分类的对象有很多:通过,ruby-on-rails,ruby,has-many-through,Ruby On Rails,Ruby,Has Many Through,大家好 请原谅我在铁轨上的笨拙 这是我的问题 我有一个类别模型和一个行程模型,定义如下 class Category < ActiveRecord::Base has_many :categorizations, :dependent => :destroy has_many :itineraries, :through => :categorizations end class Itinerary < ActiveRecord::Base has_many

大家好

请原谅我在铁轨上的笨拙

这是我的问题

我有一个类别模型和一个行程模型,定义如下

class Category < ActiveRecord::Base
  has_many :categorizations, :dependent => :destroy
  has_many :itineraries, :through => :categorizations
end

class Itinerary < ActiveRecord::Base
  has_many :categorizations
  has_many :categories, :through => :categorizations
end
我发现它不是很枯燥,因为我不得不写另一个表来重复浏览行程表,而不再需要类别

有没有一种方法可以让我们用categories.all显示所有包含未分类项的内容

多谢各位

更新1 决定在我的控制器中使用它,它在索引操作上构建一个新的未分类类别,并将其添加到数组中

def index
  uncategorized = Category.new
  uncategorized.name = "Uncategorized";
  uncategorized.itineraries = Itinerary.without_categories
  @categories = Category.all << uncategorized
end
我知道在rails中,控制器应该尽可能的瘦。 但是我想不出更好的办法了


任何有更好答案的人,请随时分享。谢谢

您只需在分类表中找到没有参考的行程即可。您可以对此进行嵌套查询

从id不在的行程中选择*从分类中选择行程\u id

只需在您的行程模型中执行如下方法:

def self.uncategorized
  Itinerary.find_by_sql('SELECT * FROM itineraries where id NOT IN ( SELECT itinerary_id FROM categorizations)')
end

从这个问题来看,也许您应该使用行程作为表的基础,包括关联的类别,并按类别名称排序-每次类别更改时创建一个中断/标题,对于那些未分类的行程,使用默认中断/标题。应该是一个简单的1通行程。您好@railsdog,谢谢您的时间。我也想过,但在我的行程中可以有很多类别。因此,我认为会有冲突,对吗?嗯,是的,我在最初的阅读中错过了这一点。我可能会求助于find_by_sql,使用if内存提供一些左连接和最终排序,以按照所需的顺序组装所需的数据。数据库在某些方面表现出色,所以为什么不让它们发挥作用,并将这些数据编组细节隐藏在模型方法后面呢。
def index
  uncategorized = Category.new
  uncategorized.name = "Uncategorized";
  uncategorized.itineraries = Itinerary.without_categories
  @categories = Category.all << uncategorized
end
def self.uncategorized
  Itinerary.find_by_sql('SELECT * FROM itineraries where id NOT IN ( SELECT itinerary_id FROM categorizations)')
end