параметры формы отправлены, но один из них получен как ноль в контроллере - PullRequest
1 голос
/ 06 июня 2019

Целью модели enroll является группировка трех других моделей gymsite , user и role .

class Gymsite
has_many :users

class User
has_many :roles, through: :assigments
has_many :assigments

class Assigment
belongs_to :user
belongs_to :role

class Role
has many :assigments
has_many :users, through: :assigments

Из формы в app / views / user / new.html.erb входные значения должны быть отправлены в app / controllers / user_controller.rb для выполнения действия «регистрация».Проблема в том, что все enroll_params отправляются как показано в браузере, но на контроллере один из них становится нулевым, периодически.

Я пытался разными способами, включая разные поля формы, как select и check_boxes, чтобы попытаться решить эту проблему, но безрезультатно.Мне интересно узнать, какова причина проблемы и как ее решить. Спасибо

Обработка информации в браузере:

Processing by UsersController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"0z2B2t7H5wYJjtJMn8zBIPJ7sJaFk706EPh5JVZsC76x  GWeggrJi7RSxAu8GJJmsyrNP7NzVv6rNvmumNDyhsg==", "enroll"=>  {"user_first_name"=>"Lorena", "user_last_name"=>"Cueva",   "user_email"=>"lcueva@example.com", "user_password"=>"[FILTERED]",   "user_password_confirmation"=>"[FILTERED]", "gymsite_id"=>"1",   "u_rol"=>["", "2", "4"]}, "commit"=>"Enroll User"}

app / views / users / new.html.erb

<%= simple_form_for @enroll, url: users_path do |form| %>

<div class='row'>
<div class='columns medium-2'></div>
   <div class='columns medium-4'>
   <%= form.input :user_first_name %>
  <%= form.input :user_last_name %>
  <%= form.input :user_email %>
  <%= form.input :user_password %>
  <%= form.input :user_password_confirmation %>
  </div>
  <div class='columns medium-4'>
  <%= form.input :u_rol, as: :check_boxes, collection: Role.all.pluck(:name, :id),  input_html: {multiple: true}%>

  <%= form.submit 'Enroll User'%>
  <% end %>
  </div>
</div>
<%= link_to 'Back', users_path %>

в app / controllers / users_controller.rb

def new
    @enroll = Enroll.new
    @roles = Role.all
  end

def create
   @enroll = Enroll.new(enroll_params)
   if @enroll.save
     redirect_to root_path
   else
     render :new
   end
 end

def enroll_params
      params.require(:enroll).permit(:user_email, :user_password, :user_password_confirmation, :gymsite_id, :u_rol, :user_first_name, :user_last_name)
end

в app / models / enroll.rb все параметры работают правильно, кроме u_rol, который становится равным nil.

class Enroll
  include ActiveModel::Model

    attr_accessor :user_email, :user_password, :user_password_confirmation, :gymsite_id, :u_rol, :user_first_name, :user_last_name, :user, :role

     def save
       if valid?
         #find gymsite by gymsite_id
         gym = Gymsite.find(gymsite_id)
         #save user for a gymsite
         @user = gym.users.create(first_name: user_first_name, last_name: user_last_name, email: user_email, password: user_password, password_confirmation: user_password_confirmation )
         #assign roles to the user
           u_rol.each do |n|
            rol = Role.find(n)
            @user.roles << rol
          end
        end
    end

1 Ответ

0 голосов
/ 06 июня 2019

Я решил эту проблему, изменив enroll_parms на

 def enroll_params
      params.require(:enroll).permit(:user_first_name, :user_last_name,:user_email, :user_password, :user_password_confirmation, :gymsite_id, u_rol: [])
    end

в приложении / views / users / new.html.erb, добавил «include_hidden: false», чтобы избавиться от пустого значения:

 <%= form.input :u_rol, as: :check_boxes, collection: Role.all.pluck(:name, :id), include_hidden: false, input_html: {multiple: true}%>

Теперь это работает !.Спасибо @jvillian за подсказку!

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