упорядочение по алфавиту в select_tag, объединенная таблица в рельсах - PullRequest
0 голосов
/ 21 марта 2012

У меня есть эта строка кода:

 <%= select_tag :friendship_id, options_from_collection_for_select(current_user.friendships, "id", "name", selected = nil) %>

, который выбирает «имя» записи в таблице «друзей» и помещает его в качестве опции в select_tag

У Friendships есть Friends_id, который связан с таблицей друзей. Я называю имя, используя

def name
  self.friend.name
end

В контроллере дружбы

Ассоциация работает, потому что я вижу список имен на веб-странице.

Я бы хотел:

  1. порядок в алфавитном порядке
  2. добавить «выбрать друга ...» вверху списка

И я пока ничего не нашел. Для выпуска 2 я добавляю selected = nil безрезультатно.

Заранее спасибо за помощь

РЕДАКТИРОВАТЬ (ОТВЕТ):

Я закончила тем, что собирала коллекцию, и стала искать друзей вместо дружбы.

 <%= select_tag :friend_id, options_from_collection_for_select(current_user.friends, "id", "name"), :prompt => 'Select a friend...', :id => 'thought_contact_select' %>

В моей пользовательской модели

has_many :friends, :through => :friendships, :order => :name

Я просто ищу дружбу, связанную для этого друга и этого пользователя на контроллере

friendship = Friendship.find_by_user_id_and_friend_id(current_user.id, params[:friend_id])    

1 Ответ

0 голосов
/ 21 марта 2012
  1. Используйте default_scope: name, но используйте его один раз!У вас должна быть одна область действия по умолчанию.Или, когда вы получаете доступ к дружбе через has_many, используйте ассоциацию has_many :friendships, :order => 'name DESC', см. Описание has_many здесь: http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html
  2. Используйте опцию :prompt для select_tag, см .: http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-select_tag

РЕДАКТИРОВАТЬ:

Если я вас понял, вы должны иметь:

class User < ActiveRecord::Base
    has_many :friendships
    has_many :friends, :through => :friendships
end

class Friendship < ActiveRecord::Base
   belongs_to :user
   belongs_to :friend
end

class Friend < ActiveRecord::Base
   has_many :friendships
   has_many :users, :through => :friendships
end

Попробуйте изменить класс User на:

class User < ActiveRecord::Base
   has_many :friendships
   has_many :friends, :through => :friendships, :order => 'name'
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...