2012-04-03 4 views
0

Я пытаюсь создать простую модель ролей для своего сайта. Пользователи могут иметь любое количество ролей. Сейчас я настраиваю его на скрытое поле в форме регистрации. Проблема, с которой я сталкиваюсь, заключается в том, что в моей вложенной форме тип роли не сохраняется. Запись с uid создается в таблице ролей, но об этом. Соответствующий код приведен ниже. Любая помощь будет оценена по достоинству.Сохранение информации из вложенных форм в контроллерах rails

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

конец

Heres форма ....

<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 обрабатываю объект role. Думаю, теперь моя единственная проблема - передать дополнительный параметр в форме и вызвать его в контроллере. –

ответ

0

Как @ Комментарий Arpit - избавиться от th e hidden: user_id. Это только смешивает атрибут setter.

И я не думаю, что создание нескольких ролей осуществляется с использованием roles.new() (это то же самое, что и roles.build()?) Собирается его отрезать. Вам нужно будет разбить параметры отдельных ролей и добавить их по одному. Или вы можете взять их на одном дыхании, как это:

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

Это было бы предположить, что вы используете роль идентификаторов в вашей форме, но вы не по какой-то причине ...

Смежные вопросы