2014-02-13 33 views
2

我有一個包含一個模型UserDelegation值:如何重寫,在一個下拉列表出現在rails_admin寶石

belongs_to :delegator, :class_name => 'User'#, :conditions => {:order => 'users.last_name ASC, users.first_name ASC'} 
belongs_to :delegatee, :class_name => 'User', :touch => true#, :conditions => {:order => 'users.last_name ASC, users.first_name ASC'} 

,並在我的用戶模型,我有這樣的:

has_many :delegatees, :through => :user_delegatees, :order => 'users.last_name ASC, first_name ASC' 
has_many :delegators, :through => :user_delegators, :order => 'last_name ASC, first_name ASC' 

當我在rails的管理和轉到用戶委託表,並添加一個新的我得到兩個下拉列表中的用戶名稱。我知道當rails_admin在關聯中填充下拉列表時,它默認使用name。

我想知道的是如何覆蓋這些下拉菜單中顯示的內容,例如我可以讓它顯示'user's name - user's location'?

回答

2

更改User模型object_label_methodrails_admin

class User < ActiveRecord::Base 

    ... 

    rails_admin do 
    object_label_method :name_location 
    end 

    def name_location 
    self.name + ' - ' + self.location 
    end 
end 
0

您需要在admin/user_delegation.rb文件中指定它。

在那裏你會有你的窗體的領域。查找下拉字段,並修改它:

f.input :your_dropdown_field, :as => :select, :collection => User.all.collect{|u| [u.name.to_s + " - " + u.location.to_s] } 

更換:your_dropdown_fieldu.nameu.location與你的價值觀。

1

喬·肯尼迪的回答完美的作品。 但是,當我在配置/初始化/ rails_admin.rb使用

class User < ActiveRecord::Base 
    rails_admin do 
     object_label_method :name_location 
    end 
    end 

以下代碼被忽略。

RailsAdmin.config do |config| 
    config.model 'User' do 
    ... 
    end 
    end 

所以我做

RailsAdmin.config do |config| 
    config.model 'User' do 
     object_label_method :name_location 
    ... 
    end 
    end 

    class User < ActiveRecord::Base 
    def name_location 
     self.name + ' - ' + self.location 
    end 
    end 

和工作原理。