rails multi missing locales language i18n available_locales ruby-on-rails erb fixtures

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