2013-03-18 2 views
0

У меня есть модель пользователя, в которой много телефонных номеров. Номер телефона принадлежит к типу phone_type, который создается в базе данных (например, в офисе, на дому, на мобильном телефоне).Rails: как заказать массив по соответствующей характеристике модели?

phone_type.rb:

class PhoneType < ActiveRecord::Base 

# id    :integer   not null, primary key 
# name   :string(255) 
# position  :integer   default(1) 

    default_scope :order => 'position ASC' 
    default_scope where(:active => true) 

Я пытался написать запрос ActiveRecord, который отображает телефонные номера для пользователя, но в порядке, который определяется порядком, установленным для phone_types по PHONE_TYPE. должность.

Мой старый код:

<% @phones.each do |p| %> 
    <%= p.phone_type.name %> <%= p.value %> <br/> 
<% end %> 

Но просто отображает номера телефонов по заказу таблицы идентификаторов. Каков правильный способ написания более сложного запроса?

ответ

3

Попробуйте это:

@phones = Phone.all(:include => :phone_type) #To avoid N+1 queries 

<% @phones.sort_by{|p| p.phone_type.position}.each do |p| %> 
    <%= p.phone_type.name %> 
    <%= p.value %> <br/> 
<% end %> 
+0

Просто интересно, так как я не 100% ясно - почему вы получаете Phone.all вместо только одного пользователя, чьи телефоны показываются? Разве вы не хотели бы что-то вроде '@ some_user.phones'? – RudyOnRails