ruby-on-rails - multi - rails translation interpolation
¿Cómo crear accesorios(para un usuario de Devise) como un yml.erb en rieles(4.1.5)? (2)
Debe pasar la contraseña en texto plano también. Estoy seguro de que hay un error de validación del modelo de usuario que impide que se creen los usuarios de su dispositivo. Aquí hay un ejemplo de mi accesorio de usuarios que funciona:
tom:
first_name: Tom
last_name: Test
email: [email protected]
password: 123greetings
encrypted_password: <%= User.new.send(:password_digest, ''123greetings'') %>
Si aún falla, revise el archivo log/test.log
para ver si hay errores y verifique que no haya campos obligatorios u otras reglas de validación que haya establecido en su modelo de usuario.
Actualización: Resulta que el autor encontró el problema por sí mismo: usó la extensión de archivo .yml.erb en lugar de .yml, lo que hizo que los rieles pasaran por alto ese archivo de accesorios. ERB funciona en dispositivos yml ya que los rieles ejecutan el archivo del dispositivo a través de ERB antes de analizarlo.
Actualización 3 : Parece que esto es específico de los aparatos en un .yml.erb. Incluso si no tengo un código de plantilla, parece que los accesorios en un archivo yml.erb no se cargan. Tener un archivo .yml plano funciona. Esto probablemente no tiene nada que ver con el diseño per se.
Nota: vea las anotaciones de la Actualización 3 para los cambios relevantes
Necesito generar usuarios de Devise en mi aplicación de rieles. Observo que al borrar la base de datos y cargar los dispositivos se cargan todos los demás dispositivos, excepto los usuarios de Devise ( Actualización 3 : que está en un archivo .yml.erb).
He visto este otro hilo , pero probé todas las opciones allí y todavía no parece cargar los aparatos.
# ../fixtures/users.yml.erb
user1:
email: [email protected]
name: user1
encrypted_password: <%= Devise.bcrypt(User, ''passw0rd!'') %>
# also tried encrypted_password: User.new(password_salt: ''$2a$10$PoBe1MvkoGJsjMVTEjKqge'').send(:password_digest, ''somepassword'')
admin: true
Y desde la consola:
Para borrar la prueba db:
$ bundle exec rake db:schema:load RAILS_ENV=test
Para cargar los dispositivos en la base de datos de prueba:
$ bundle exec rake db:fixtures:load RAILS_ENV=test
Ejecute la consola de rieles en prueba (no se encontraron usuarios, pero se están cargando otros accesorios del modelo, como la aplicación):
$ rails c test
Loading test environment (Rails 4.1.5)
irb(main):001:0> User.first
User Load (0.1ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT 1
=> nil
irb(main):002:0> App.first
App Load (0.1ms) SELECT "apps".* FROM "apps" ORDER BY "apps"."id" ASC LIMIT 1
=> #<App id: 953336129,...>
Actualización 1 : también se intentó pasar la contraseña cifrada generada desde la consola, aún no se encuentran registros de usuarios:
admin:
email: [email protected]
name: user1
encrypted_password: $2a$04$DR0.2yfWwD8AZlyeXx0gEuk2Qh.cNLF4cir0ZUB1iW7hwQhK/IfcC
admin: true
Actualización 2 : Funciona cuando renombro el archivo de fixtures a users.yml. Cambiar el nombre a users.yml.erb parece ser el culpable. Por cierto, se ve el mismo comportamiento (es decir, funciona con .yml, pero no con yml.erb) en la consola y desde la rake test
<% 100.times do |n| %>
user_<%= n %>:
email: <%= "user#{n}@example.com" %>
encrypted_password: <%= Devise.bcrypt(User, ''password'') %>
<% end %>
Es una forma alternativa de hacer lo mismo, no tiene que crear una nueva instancia.
# lib/devise/models/database_authenticatable.rb:147
def password_digest(password)
Devise.bcrypt(self.class, password)
end
editar:
Gracias a @ sixty4bit por señalar el uso obsoleto, la respuesta actualizada sería:
<% 100.times do |n| %>
user_<%= n %>:
email: <%= "user#{n}@example.com" %>
encrypted_password: <%= Devise::Encryptor.digest(User, ''password'') %>
<% end %>