2011-07-21 193 views
-1
<%= form_for(@membership) do |f| %> 
    <%= f.collection_select :user_id, User.all, :id, :email %> 
    <%= f.collection_select :role_id, Role.all, :id, :name %> 
    <%= f.submit %> 
<% end %> 

我想要做的是,而不是使用用戶的選擇框,我想爲用戶的電子郵件放置一個文本字段。虛擬屬性

<%= form_for(@membership) do |f| %> 
    <%= f.text_field :email %> 
    <%= f.collection_select :role_id, Role.all, :id, :name %> 
    <%= f.submit %> 
<% end %> 

Membership.rb

belongs_to :user 
belong_to :role 

attr_accessor :email 
def email 
self.user.email if self.user 
end 

什麼我不知道是什麼在控制器寫,使其工作,是該ATTR訪問使用的東西和電子郵件方法好嗎?任何幫助表示讚賞。

def create 
    @membership = Membership.new(params[:membership]) 
    if @membership.save 
     redirect_to(memberships_url) 
     else 
     render :action => "new" 
    end 
+2

如果您選擇了最佳問題標題,會更好。我必須閱讀整個問題主體以瞭解你在問什麼。 –

回答

1

我覺得你要找的是一個嵌套的形式。在具有has_x名稱的型號上,您可以使用accepts_nested_attributes_for。還有一個解釋它的。這意味着你有兩個不錯的選擇:

  1. 重新定義你的表格是爲用戶和使用fields_for添加成員屬性
  2. 開關使用你的模型,以便用戶屬於會員和會員has_x用戶(s)
+0

不,管理員正在創建成員資格,但我不希望他們看到所有用戶,他們必須輸入用戶的電子郵件,如果他們想要分配角色 – rOrman

+0

因此,電子郵件字段存儲在用戶模型下,管理員將輸入用戶的電子郵件地址來自會員表單? – jklina

+0

是的電子郵件字段是用戶模型。會員模式有user_id – rOrman

1

如果您只想更新現有用戶,您必須通過電子郵件在您的創建操作中找到用戶,因爲Membership需要user_id和role_id。