Rails 3:可以通过联结表进行订购吗?

时间:2012-11-29 17:05:51

标签: sql ruby-on-rails ruby-on-rails-3 junction-table

我有一个嵌套的表单,为每个帖子创建了许多位置。每个位置也可用于多个帖子。

E.g。帖子1可能有Location1,Location2和Location3

AND Post 2可能有Location1,Location4和Location5

我希望这些位置按照添加顺序在帖子中排序。我假设最简单的方法是在连接表(Posts_Locations)中添加“订单”列,但是我不知道如何设置它或在我的控制器中定义:order_by。我应该直接使用SQL吗?

有什么建议吗?这是最好的方法吗?

1 个答案:

答案 0 :(得分:1)

如果你使用简单的连接表和邮件和位置的has_and_belongs_to_many,你可能想让posts_locations表本身成为一个模型,使用has_many :through加入这两个表。这是很好的描述here in this Rails guide

额外提示:当您添加新列时,更改模型,从而将表名称连接到单个名称,例如PostLocation,这将导致表名post_locations ...或者更具描述性的内容。此外,不要在此字段中使用“order”一词,因为它是rails和SQL中的关键字。也许称之为“display_order”?

然后在PostLocation模型中,您可以创建一个范围,甚至是一个定义正确顺序的默认范围。 scope :sorted, order("display_order DESC")

我可能会问的另一个问题是:邮件的顺序是否与任何位置相关联,反之亦然?