在select_tag中按字母顺序排序,在rails中连接表

时间:2012-03-20 21:22:01

标签: ruby-on-rails forms activerecord html-select

我有这行代码:

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

选择'friends'表中记录的'name'并将其作为选项放在select_tag

友谊有一个links_id链接到朋友表。我用

打电话给这个名字
def name
  self.friend.name
end

在友谊控制者中

该关联有效,因为我在网页上看到了名单。

我想:

  1. 按字母顺序排列
  2. 在列表顶部添加“选择朋友...”
  3. 我还没有找到任何东西。 对于问题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 :(得分:0)

  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
  3. 修改

    如果我理解你,你应该:

    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