2012-04-03 7 views
0

Ich versuche ein einfaches Rollenmodell für meine Website einzurichten. Benutzer können beliebig viele Rollen haben. Im Moment stelle ich es als verstecktes Feld auf dem Anmeldeformular ein. Das Problem, auf das ich stoße, ist, dass in meiner verschachtelten Form der Rollentyp nicht gespeichert wird. Ein Eintrag mit der UID wird in der Rollentabelle erstellt, aber das ist es auch schon. Der entsprechende Code ist unten. Jede Hilfe wäre willkommen.Speichern von Informationen aus verschachtelten Formularen in Schienen-Controllern

== 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 

Heres die create-Methode von meinem Benutzer-Controller ...

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 

Ende

Heres die Form ....

<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

Können Sie mir bitte sagen, wie erhalten Sie current_user.id, wenn es sich um ein Anmeldeformular handelt? Code: '<% = role_form.hidden_field: user_id,: wert => current_user.id%>' –

+0

Guter Punkt, ich habe es aus dem Formular entfernt und in der Steuerung nach @ user.save behandle ich das Rollenobjekt. Ich denke, mein einziges Problem ist jetzt, wie man einen zusätzlichen Parameter in einem Formular übergibt und es im Controller aufruft. –

Antwort

0

Als @ Arpit Kommentare - loswerden th e versteckt: Benutzer-ID-Tag. Es verwirrt nur den Attributsetzer.

Und ich glaube nicht, mehrere Rollen mit roles.new() (ist das das gleiche wie roles.build()?) Wird es zu schneiden. Sie müssen die Parameter der einzelnen Rollen austeilen und einzeln hinzufügen. Oder Sie können sie in einem Rutsch wie diese greifen:

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

Dies würde davon ausgehen, dass Sie Rolle-IDs in Ihrem Formular verwenden, aber sie sind nicht aus irgendeinem Grund ...

Verwandte Themen