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