2013-03-17 45 views
-1

我這兩個型號形式active_admin顯示名稱爲ID與HAS_ONE協會

def School 
    attr_accesible :user_id 
    belongs_to :user 
end 

def User 
    attr_accesible :name 
    has_one :school 
end 

我想創建活動的管理一所新學校,但是當我應該選擇一個用戶,我想說明現有用戶的名稱不是ID。我怎樣才能做到這一點?

form do |f| 
    f.inputs "School" do 
     f.input :name 
     f.input :user_id # ??? 
    end 
    f.buttons 
    end 
+0

您的聯繫可能是錯誤的。學校應該有很多用戶,用戶應該屬於一所學校。 – Zippie 2013-03-17 11:26:22

+0

沒有錯,用戶是學校的所有者。我希望當我在活動管理員創建一所學校時,從沒有學校的用戶中進行選擇。 – vladCovaliov 2013-03-17 13:17:22

+0

是唯一的用戶名? – Zippie 2013-03-17 13:20:28

回答

1

嘗試這樣的:(我希望你在學校模型不止一個屬性)

<%= form_for(@school), do |f| %> 
    <%= f.select :user_email, @users_without_schools %> 
    <%= f.submit "Create new school" %> 
<% end %> 

在你的控制器動作你在哪裏呈現這種形式:

@school = School.new 
@users_without_schools = User.all.map { |user| user.email if user.school.nil? } 

並在您創建動作

@user = User.find_by_email(params[:user_email]) 
你的情況

http://railscasts.com/episodes/16-virtual-attributes

所以,你的setter方法會是這樣的:

對於user_mail,創建一個虛擬屬性

Class School < ActiveRecord::Base 

    def user_email=(email) 
     user = User.find_by_email(email) 
     self.user_id = user.id 
    end 

end 
+0

的電子郵件實例,我需要在active_admin中有這個,我沒有控制器:(而且問題不是真的,找出什麼用戶doens沒有學校,更多的是顯示用戶名,而不是他們的id,以我的形式 – vladCovaliov 2013-03-17 15:01:53

+0

好吧,我給你瞭如何顯示他們的電子郵件的代碼,你不應該顯示他們的名字,因爲你說他們不是唯一的。我從來沒有使用過Active_admin說實話,但我不明白你的用戶將不會有一個控制器 – Zippie 2013-03-17 15:06:19

+0

我認爲有一個,但沒有生成,是在寶石或水晶內。其實,我認爲id關於獨特的東西,它會自動匹配的id與名稱,我會發布我的解決方案。 – vladCovaliov 2013-03-17 15:08:13

0
form do |f| 
    f.inputs "School" do 
     f.input :name 
     f.input :user_id, as: :select, collection: User.all 
    end 
    f.buttons 
    end 

這是不是很難:(。

,並在型號/ user.rb

def to_s 
    self.first_name + " " + self.last_name 
end 
+0

哦,很酷,我很抱歉,我沒有弄清楚自己這樣,我一直在散漫着所有的選擇選項T Rails有很多選擇。你在下拉菜單中得到什麼? USER_ID的? 而像這樣,你可以獲得所有用戶,但不僅僅是沒有學校的用戶。 – Zippie 2013-03-17 15:14:05

+0

這樣我得到所有的用戶,但與他們的名字,而不是ids。 – vladCovaliov 2013-03-17 15:18:14