Pipevel
Pipevel

Reputation: 71

Activestorage, Devise, Rails 5.2 information is nil

I am with this configuration: Activestorage in my localhost:3000 with rails 5.2

I have the next code in my user sign in:

"<div class="panel panel-default">
  <div class="panel-heading">
    <h1 class="display-4"> Seamos cómplices para cumplir nuestros sueños. </h1>
    <h3 class="text-center"> Llenando este sencillo formulario recibirás al final nuestra agenda biodinámica con los 12 pasos volver tu sueño realidad. </h3>
    <p style="text-align:center;">
    <iframe width="100%" height="315" align="middle" src="https://www.youtube.com/embed/pDKDtS6Z4oY" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
    </p>
  </div>
  <div class="panel-body">
    <br /><br />
    <div class="container">
      <%= simple_form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :post, class: 'form-horizontal' }) do |f| %>
      <%= devise_error_messages! %>
      <div class="stepwizard">
        <div class="stepwizard-row setup-panel">
          <div class="stepwizard-step">
            <a href="#step-1" type="button" class="btn btn-primary btn-circle">1</a>
            <p>Paso 1</p>
          </div>
          <div class="stepwizard-step">
            <a href="#step-2" type="button" class="btn btn-default btn-circle" disabled="disabled">2</a>
            <p>Paso 2</p>
          </div>
          <div class="stepwizard-step">
            <a href="#step-3" type="button" class="btn btn-default btn-circle" disabled="disabled">3</a>
            <p>Paso 3</p>
          </div>
        </div>
      </div>
      <form role="form">
        <div class="row setup-content" id="step-1">
          <div class="col-xs-12">
            <div class="col-md-12">
              <h3> Paso 1</h3>
              <br />
              <div class="form-group">
                <%= f.label :username, "Username (elige un nombre de usuario)" %>
                <br />
                <%= f.text_field :username, placeholder: "Elige el nombre de usuario que desees", class: "form-control", required: true, autofocus: true, type: "input" %>
              </div>
              <div class="form-group">
                <%= f.label :name, "Nombre" %>
                <br />
                <%= f.text_field :name, placeholder: "Pon aquí tu Nombre", class: "form-control", autofocus: true, type: "input" %>
              </div>
              <div class="form-group">
                <%= f.label :lastname, "Apellido" %>
                <br />
                <%= f.text_field :lastname, placeholder: "Pon aquí tu Apellido", class: "form-control", autofocus: true, type: "input" %>
              </div>
              <button class="btn btn-primary nextBtn btn-lg pull-right" type="button" >Siguiente</button>
            </div>
          </div>
        </div>
        <div class="row setup-content" id="step-2">
          <div class="col-xs-12">
            <div class="col-md-12">
              <h3> Paso 2</h3>
              <br />
              <div class="form-group">
                <%= f.label :email, "Correo Electrónico (email)" %>
                <br />
                <%= f.email_field :email, placeholder: "Ingresa tu correo electrónico", class: "form-control", autofocus: true, type: "input" %>
              </div>
              <div class="form-group">
                <%= f.label :password, "Contraseña" %>
                <br />
                <%= f.password_field :password, placeholder: "Ingresa tu contraseña", class: "form-control", autofocus: true %>
              </div>
              <div class="form-group">
                <%= f.label :password, "Repite tu contraseña" %>
                <br />
                <%= f.password_field :password_confirmation, placeholder: "Ingresa nuevamente tu contraseña", class: "form-control", autofocus: true %>
              </div>

              <div class="form-group">
                <%= f.label "Sube tu avatar (opcional)", class: 'col-sm-2 control-label'  %>
                <div class="col-sm-6">
                  <%= f.file_field :avatar, class: 'photo_upload' %>
                </div>

              </div>
              <br /><button class="btn btn-primary nextBtn btn-lg pull-right" type="button" >Siguiente</button>
              <button class="btn btn-info prevBtn btn-lg pull-left" type="button" >Anterior</button>
            </div>
          </div>
        </div>
        <div class="row setup-content" id="step-3">
          <div class="col-xs-12">
            <div class="col-md-12">
              <h3> Paso 3</h3><br />
              <div class="form-group">
                <%= f.label "País *", class: 'col-sm-2 control-label'  %>
                <div class="col-sm-6">
                  <%= f.text_field :country, placeholder: "Ingresa tu país de Residencia", class: "form-control" %>
                </div>
              </div>
              <div class="form-group">
                <%= f.label "Región", class: 'col-sm-2 control-label'  %>
                <div class="col-sm-6">
                  <%= f.text_field :region, placeholder: "Ingresa tu región de Residencia (Estado/Departamento/Provincia)", class: "form-control" %>
                </div>
              </div>
              <div class="form-group">
                <%= f.label "Ciudad/Población", class: 'col-sm-2 control-label'  %>
                <div class="col-sm-6">
                  <%= f.text_field :city, placeholder: "Ingresa tu Población (Ciudad/Municipio, Corregimiento, Vereda)", class: "form-control" %>
                </div>
              </div>
              <div class="form-group">
                <%= f.label "Fecha de Nacimiento (opcional)", class: 'col-sm-2 control-label'  %>
                <div class="col-sm-6">
                  <%= f.input :born_date, as: :date_picker, label: false, placeholder: "Da click en el botón de calendario de la derecha" %>
                </div>
              </div>
              <div class="form-group">
                <%= f.label "Facebook", class: 'col-sm-2 control-label'  %>
                <div class="col-sm-6">
                  <i class="fa fa-facebook"></i><%= f.text_field :facebook, class: "form-control", placeholder: "Ingresa la url - link de tu perfil de facebook" %>
                </div>
              </div>
              <div class="form-group">
                <%= f.label "Twitter", class: 'col-sm-2 control-label'  %>
                <div class="col-sm-6">
                  <i class="fa fa-twitter"></i><%= f.text_field :twitter, class: "form-control", placeholder: "Ingresa la url - link de tu perfil de facebook" %>
                </div>
              </div>
              <div class="form-group">
                <%= f.label "Sitio Web", class: 'col-sm-2 control-label'  %>
                <div class="col-sm-6">
                  <i class="fa fa-external-link"></i><%= f.text_field :website, class: "form-control", placeholder: "Si tienes sitio web y quieres compartir, pon aquí la url" %>
                </div>
              </div>
              <%= f.submit "¡Regístrate!", class: "btn btn-primary btn-lg pull-right" %>
              <button class="btn btn-info prevBtn btn-lg pull-left" type="button" >Anterior</button>
            </div>
          </div>
        </div>
      </form>
      <% end %>
    </div>
    <br />
    <div class="panel-footer">
      <%= render "devise/shared/links" %>
    </div>
  </div>
</div>"

I made the configuration for activestorage:

  1. Added storage.yml

" local:

  service: Disk
  root: <%= Rails.root.join("storage") %>

test:

  service: Disk
  root: <%= Rails.root.join("tmp/storage") %>"
  1. Development.rb

    "config.active_storage.service = :local"

  2. test.rb:

    "config.active_storage.service = :test"

  3. User devise model:

    "has_one_attached :avatar"

  4. Application/controller

    " def configure_permitted_parameters params = [ :lastname, :username, :phone, :country, :city, :born_date, :website, :facebook, :twitter, :avatar]

    devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
    devise_parameter_sanitizer.permit(:account_update, keys: [:name, :avatar])
    

    end"

When i create an user i see this in my terminal:

"User id: 9, email: "[email protected]", created_at: "2020-02-14 13:53:14", updated_at: "2020-02-14 13:53:14", sash_id: nil, level: 0, name: nil, lastname: nil, avatar_file_name: nil, avatar_content_type: nil, avatar_file_size: nil, avatar_updated_at: nil, username: nil, facebook: nil, twitter: nil, country: nil, region: nil, city: nil, born_date: nil, website: nil, admin: nil"

User is created but information is nil, so when i go to my user panel i see avatar:nil error.

¿Why my devise is not loading the information?

Thanks for helping!

Upvotes: 0

Views: 83

Answers (1)

Semih Arslanoglu
Semih Arslanoglu

Reputation: 1129

You should be allowing these attributes not on your application controller, but on your users controller like this.

class UsersController < ApplicationController
  def create
    user = User.create!(user_params)
    session[:user_id] = user.id
    redirect_to root_path
  end

  private
    def user_params
      params.require(:user).permit(:username,
                                   :name,
                                   :lastname,
                                   :email,
                                   :password,
                                   :password_confirmation,
                                   :avatar,
                                   :country,
                                   :region,
                                   :city,
                                   :born_date,
                                   :facebook,
                                   :twitter,
                                   :website)
    end
end

Upvotes: 1

Related Questions