2012-04-03 7 views
0

私は自分のサイトに簡単なロールモデルを設定しようとしています。ユーザーは任意の数の役割を持つことができます。今私はそれをサインアップフォームの隠れたフィールドに設定しています。私が実行している問題は、入れ子になったフォームでロールタイプが保存されていないことです。ロールテーブルにはuidのエントリが作成されていますが、それはそれです。関連するコードは以下の通りです。どんな助けもありがとう。入れ子フォームからの情報をレールコントローラに保存

== Schema Information 

Table name: roles 

    id   :integer   not null, primary key 
    user_id :integer 
    role  :string(255) 
    created_at :datetime  not null 
    updated_at :datetime  not null 

相続人

def create 
@user = User.new(params[:user]) 
if @user.save 
    @role = @user.roles.new(user_id:@user.id, role:params[:role]) 

    flash[:success] = "Thanks for singing up for the Auditions App, any audition invitations will be visible on this page"     
    #need to add the role guest to user roles 
    redirect_to @user 
else 
    render 'new' 
end 

エンド

相続フォーム....

<div class="span10 offset1 ajax-form"> 
<%= form_for(@user, :html => {:class => 'well'}) do |f| %> 

     <h3>Guest Account Signup</h3> 

     <%= render 'shared/error_messages' %> 

     <div class="pull-left form-field"><%= f.label :first_name %> 
    <%= f.text_field :first_name, :class => 'span4' %></div> 
    <div class="pull-left form-field"><%= f.label :last_name %> 
    <%= f.text_field :last_name, :class => 'span4' %></div> 
    <div class="pull-left form-field"><%= f.label :email %> 
    <%= f.text_field :email, :class => 'span4' %></div>           
    <div class="pull-left form-field span4"></div> 
     <div class='clear'></div><!--close .clear--> 

    <div class="pull-left form-field"><%= f.label :password %> 
    <%= f.password_field :password, :class => 'span4' %></div> 
    <div class="pull-left form-field"><%= f.label :password_confirmation, "Confirm Password" %> 
    <%= f.password_field :password_confirmation, :class => 'span4' %></div> 
     <div class="form_row pull-left form-field"> 
     </div> 

      <%= f.hidden_field :role, :value => 'guest' %> 

    <%= f.submit "Create my account", :class => "btn btn-large btn-primary pull-left form-field" %> 
     <div class='clear'></div><!--close .clear--> 
<% end %> 

+0

あなたはどのように言ってくださいすることができ:それとも、このような一度にそれらをつかむことができますサインアップフォームの場合はcurrent_user.idを取得していますか?コード: '<%= role_form.hidden_​​field:user_id、:value => current_user.id%>' –

+0

良い点は、@ user.saveの後にフォームとコントローラーの外に移動しました。私の唯一の問題は、フォームに余分なパラメータを渡してコントローラで呼び出す方法です。 –

答えて

0

として...私のユーザーコントローラからメソッドを作成します@ Arpitのコメント - thを取り除くe hidden:user_idタグ。これは、属性セッターを混乱させるだけです。

roles.new()を使用して複数の役割を構築しているとは思わない(それはroles.build()と同じですか?)それを切り詰めるつもりです。別々のロールのパラメータを分割して、一度に1つずつ追加する必要があります。

selected_roles = Role.find_all_by_id(params[:roles]) 
@user.roles = selected_roles 

これはあなたのフォームで役割IDを使用していることを前提としていますが、あなたには、いくつかの理由ではありません...

関連する問題