2012-07-25 185 views
19

我已經安裝了rails_admin到我的應用程序,我想做一些非常基本的...我有兩個模型,他們的聯繫按預期出現......我有一個研討會註冊模型belongs_to :用戶。rails_admin顯示名稱而不是id

在rails_admin它列出了我的研討會註冊用戶爲用戶#1,用戶#1等

我想有一個是用戶的名稱,而不是。我已經成功地做到的是:

config.model SeminarRegistration do 
label "Seminar Signups" 
# Found associations: 
    configure :user, :belongs_to_association 
    configure :seminar_time, :belongs_to_association # # Found columns: 
    configure :id, :integer 
    configure :user_id, :integer   # Hidden 
    configure :seminar_time_id, :integer   # Hidden 
    configure :created_at, :datetime 
    configure :updated_at, :datetime # # Sections: 

list do 
    field :user do 
    pretty_value do 
    user = User.find(bindings[:object].user_id.to_s) 
    user.first_name + " " + user.last_name 
    end 
    end 
    field :seminar_time 
end 
export do; end 
show do; end 
edit do; end 
create do; end 
update do; end 
end 

的「pretty_value」節給了我我的用戶名和姓的文字...但有兩個問題:

1)這是沒有更長的鏈接。如果我離開默認值(用戶#1,用戶#2等),它提供了一個鏈接到該用戶。我如何獲得該鏈接? rails_admin如何定義路徑?

2)看起來太過笨重有通過ID就在那裏看在我的形式...

很抱歉,如果這是一個基本的問題。我已閱讀手冊並查找了其他問題,但尚未完全「點擊」我。我對rails也很新穎。

謝謝。


我不得不這樣做是爲了得到它與鏈接工作:

我添加了作爲建議的全名的輔助方法,但保留在我的視圖助手:

module ApplicationHelper 
def full_name(user_id) 
    user = User.find(user_id) 
    user.first_name + " " + user.last_name 
end 
end 

然後,我喜歡這樣的「pretty_value」部分改變:

pretty_value do 
    user_id = bindings[:object].user_id 
    full_name = bindings[:view].full_name(user_id) 
    bindings[:view].link_to "#{full_name}", bindings[:view].rails_admin.show_path('user', user_id) 
end 

基本上,以訪問任何觀點,他lpers(導軌或其他方式作出)必須添加indings [:視圖] .my_tag_to_use

要獲取用戶的rails_admin路線,例如,你可以這樣做:

bindings[:view].rails_admin.show_path('user', user_id) 

回答

20
RailsAdmin.config {|c| c.label_methods << :full_name} 

config.model full_name do 
    object_label_method do 
    :full_name 
    end 
end 

然後在模型中添加一個full_name方法。

+0

好吧,這是一個更乾淨的方式。但沒有得到我的鏈接...我編輯我的答案上面,以顯示我如何得到它的工作。 – user1535082 2012-09-24 20:44:47

+0

它可以工作,但在關聯查找中,您只能根據名字或姓氏進行搜索,但不能同時進行搜索。 – 2014-02-18 04:48:20

+0

我還得到一個object_label_method的鏈接,關聯只需要定義 – 2014-08-23 13:06:57

30

我在谷歌上偶然發現了這個問題,並發現了一個更簡單的方法來做到這一點。將titlename方法添加到您的模型中,該模型將使用rails_admin而不是顯示「用戶#1」。

class User 
    ... 
    def name 
    first_name + " " + last_name 
    end 
    ... 
end 

可以使用title代替name,但在你的情況下,它更有意義,使用的名字。

+0

真棒和簡單的答案,thx很多! – GuiGreg 2014-04-30 13:39:29

+0

有史以來最好的黑客! :D – AshwinKumarS 2014-10-15 12:19:02

+1

絕對精彩。這應該是被接受的答案。 – Brit200313 2015-06-10 23:08:02

9

我這樣做像 '角色' 模式

config.model 'Role' do 
    object_label_method do 
    :custom_label_method 
    end 
end 

def custom_label_method 
    "#{role_name}" 
end 

它的工作原理

+1

這正是我所需要的。我會爲其他人添加一些上下文,您應該將「config.model」添加到模型類的rails_admin.rb初始化程序和custom_label_method中。 – 2015-06-19 18:08:29

0

只需在您的用戶模型補充一點:

# Prety User name display for rails_amdin 
def to_s 
    return self.name 
end 
def title 
    return self.to_s 
end 

然後,重新啓動服務器。

您必須同時添加to_stitle方法,並且您可以通過用戶方案中的任何內容更改self.name

它爲我使用Rails 4

+0

你不需要'to_s'。定義'title'或者'name'就足夠了,看到這裏的源代碼(https://github.com/sferik/rails_admin/blob/12aeaf30b2148d3cbebb2f831132b4787fd47bfe/lib/rails_admin/config.rb#L50) – 2016-02-15 04:29:56

0

的東西作爲一般的名字,我平時在模型上添加一個方法。但是,另一種方法是在RA

0

您可以使用rails_admin object_label_method

See link

對於用戶模型,在rails_admin.rb爲外地配置標籤

config.model 'User' do 
    object_label_method do 
    :custom_label_method 
    end 
end 

在模型建立方法

def custom_label_method 
    "User #{user_name}" 
end 
相關問題