2011-07-21 17 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のアクセサで、電子メールの方法はokですか?どんな助けもありがとうございます。

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を使用できます。それを説明するもあります。これは、2つのまともな選択肢を持っていることを意味:

  1. ユーザーのためになると、会員は、ユーザーが会員と会員has_xユーザーに属するよう
  2. の周りあなたのモデルを切り替え
  3. 属性を追加するfields_for使用するようにフォームを再定義
+0

いいえいいえ。管理者はメンバーシップを作成していますが、すべてのユーザーを表示する必要はありません。ロールを割り当てる場合は、ユーザーの電子メールを入力する必要があります – rOrman

+0

電子メールフィールドはユーザーモデルに格納され、管理者はメンバーシップフォームからのユーザーのメールアドレス? – jklina

+0

はいメールフィールドはユーザーモデルにあります。メンバーシップモデルにuser_idがあります – rOrman

1

メンバーシップにuser_idとrole_idが必要なため、既存のユーザーのみを更新するには、作成アクションで電子メールでユーザーを検索する必要があります。

関連する問題