在我的应用程序中,有一个Membership
模型,其属性为username_or_email
,用于邀请用户加入系统。当用户接受邀请时,Membership
对象将更新为与具有User
属性的新name
对象的关系。现在我想在一个视图中对每个Membership
对象进行排序,并将其显示如下:
User
对象显示名称属性。username_or_email
属性。如何通过两列按字母顺序轻松对其进行排序?
答案 0 :(得分:0)
以下是您可以这样做的方法(让我们假设使用PostgreSQL)
处理查询的成员资格范围
# class Membership
def self.ordered_by_formatted_name
joins("LEFT JOIN users ON users.id = memberships.user_id").
order("COALESCE(users.name, memberships.username_or_email)")
end
显示逻辑的成员资格的实例方法
# class Membership
def formatted_name
user ? user.name : username_or_email
end
使用示例
@memberships = Membership.ordered_by_formatted_name.preload(:user)
<% @memberships.each do |m| %>
<%= m.formatted_name %>
<% end %>