Сохранение информации из вложенных форм в контроллерах рельсов - PullRequest
0 голосов
/ 03 апреля 2012

Я пытаюсь настроить простую модель ролей для своего сайта.Пользователи могут иметь любое количество ролей.Прямо сейчас я настраиваю это как скрытое поле в форме регистрации.Проблема, с которой я сталкиваюсь, заключается в том, что в моей вложенной форме тип роли не сохраняется.Запись с 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

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

1 Ответ

0 голосов
/ 03 апреля 2012

Как комментарии @Arpit - избавьтесь от скрытого тега: user_id. Это только мешает атрибуту setter.

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...