En esta clase debemos asegurarnos de que nuestro servidor de MongoDB esté ejecutándose, si no es así y has usado m como gestor de versiones, puedes ejecutar tu servidor usando:
m use 4.2 --dbpath ~/data/mongodb/4.2
el path del dbpath podría cambiar acorde a donde están ubicados tus archivos de base de datos.
En el archivo config/mogoid.yml puedes cambiar el puerto y host por defecto si tu instalación de MongoDB está generada con parámetros diferentes a los que vienen por defecto: localhost y puerto 27017
Users has been created
rails aborted!Mongoid::Errors::Validations:message:ValidationofTask failed.summary:The following errors were found:Participating users is invalid
resolution:Try persisting the documentwith valid data or remove the validations.
Dejo mis seeds
['alcides','kamila','angel','anyerlis','michael','edixon','carlos','keymar','joel'].eachdo|name|User.create(email:"#{name}@gmail.com",password:'123456')end
puts 'Users has been created'owner =User.find_by(email:'keymar@gmail.com')info =[['nis','armar planilla de amazon',['1:1','2:2','3:random']],['traduccion','traducir a aleman las categorias de beauty',['4:1','5:2','6:random']],['categorizacion','Categorizar los productos del cliente x',['7:1','8:2','9:random']]]info.eachdo|category, description, participant_set|Category.create!(name: category,description:'--') puts 'Category have been created'ifCategory.count==3 participants = participant_set.mapdo|participant| id, raw_role = participant.split(':') role = raw_role =='random'?[1,2].sample: raw_role
Participant.new(user:User.find(id.to_i),role: role.to_i) end
Task.create!(name: category,description: description,category:Category.find_by(name: category),due_date:Date.today+2.days,owner: owner,participating_users: participants
)end
puts 'Task have been created'ifTask.count==3
Y mis modelos
classTask # module for mondoid
include Mongoid::Document include Mongoid::Timestampsfield:name,type:Stringfield:description,type:Stringfield:due_date,type:Datefield:code,type:Stringbelongs_to:category
belongs_to:owner,class_name:'User'has_many:participating_users,class_name:'Participant',dependent::destroy
# has_many :participants,through::participating_users,source::user
has_many:notes,dependent::destroy
validates:name,:description,presence:truevalidates:name,uniqueness:{case_sensitive:false}validate:due_date_validity
before_create:create_code
after_create:send_email
accepts_nested_attributes_for:participating_users,allow_destroy:true
def participants
participating_users.includes(:user).map(&:user) end
def due_date_validity
returnif due_date.blank?returnif due_date >Date.today errors.add:due_date,'La fecha no puede estar en el pasado' end
def create_code
self.code="#{owner_id}#{Time.now.to_i.to_s(36)}#{SecureRandom.hex(8)}" end
def send_email
returnreturn unless Rails.env.development?(participants +[owner]).eachdo|user|ParticipantMailer.with(user: user,task: self).new_task_mailer.deliver! end
end
end
classUser # module for mondoid
include Mongoid::Document include Mongoid::Timestamps # Includedefault devise modules.Others available are: # :confirmable,:lockable,:timeoutable,:trackable and :omniauthable
devise:database_authenticatable,:registerable,:recoverable,:rememberable,:validatable
## Database authenticatable
field:email,type:String,default:""field:encrypted_password,type:String,default:"" ## Recoverablefield:reset_password_token,type:Stringfield:reset_password_sent_at,type:Time ## Rememberablefield:remember_created_at,type:Time ## Trackable # field :sign_in_count,type:Integer,default:0 # field :current_sign_in_at,type:Time # field :last_sign_in_at,type:Time # field :current_sign_in_ip,type:String # field :last_sign_in_ip,type:String ## Confirmable # field :confirmation_token,type:String # field :confirmed_at,type:Time # field :confirmation_sent_at,type:Time # field :unconfirmed_email,type:String # Onlyif using reconfirmable
## Lockable # field :failed_attempts,type:Integer,default:0 # Onlyif lock strategy is :failed_attempts
# field :unlock_token,type:String # Onlyif unlock strategy is :email or :both
# field :locked_at,type:Timehas_many:owned_tasks,class_name:'Task'has_many:participations,class_name:'Participant' # has_many :tasks,through::participations
def tasks
participations.includes(:task).map(&:task) end
end
Despues de "esquivar" mi problema a la hora de hacer db:reset (sigue sin funcionar), haciendo db:setup, ahora tengo otro problema. Pues la relación entre Task y User (participating_users) no funciona para nada. Tengo el código idéntico hasta ahora, con la diferencia sustancial de que estoy utilizando Rails 7.
Además, he tenido que utilizar otra gema distinta para la acción de botón para añadir nuevos campos anidados al formulario de nueva Task. Y este método de la gema Vanilla-nested llamado "link_to_add_nested" me devuelve un nuevo error después de haber echo la migración a MongoDB...
Y todo radica en el error a la hora de "entender" la relación existente entre los modelos Task y User.
Es bastante frustrante no poder realizar el curso completo, aún habiendo subsanado errores de compatibilidad por mi mismo, lo cual ha sido muy enriquecedor (debo admitirlo).
Me estoy planteando montar una máquina virtual con la versión de rails utilizada por el profesor para desarrollar la aplicación entera de nuevo... Lo cuál supone una pérdida te tiempo considerable!
Por favor, podríais añadir una versión del curso actualizada a Rails 7?? O añádir algún nuevo curso de Rails, eso estaría chido. He pagado la suscripción premium con el fin de terminar ambos cursos sobre Rails, y esto me impide continuar.
Hola a todos comunidad! Tengo un probelma, al hacer el db:reset me sale el siguiente error:
Comprobe los modelos y los controlladores y parecen estar correctos, alguno se le ocurre donde puede estar el error?? Graciaass!!
Hola Sebastián, revisa la clase/modelo Note en la línea de código 5, revisa si tienes un typo (error de digitación) en lo que probablemente podría ser la declaración de un campo field, si no logras encontrar el error, podrías enviarme un pantallazo o el bloque de tu modelo Note y del archivo seeds.rb
Hola Johan! Era un typo, escribi fields en lugar de field, muchas gracias!
Hola!
Al momento de escribir 'rails g devise user' en la consola de comandos, me aparece el siguiente error:
Alguno sabe como solucionarlo?
Muchas gracias!
Si alguien sabe como solucionarlo, por favor ayudeme, estoy hace dias con este error y nu quiero avanzar con el curso hasta no haberlo solucionado. Gracias!
Ya fue solucionado, gracias!
Hola a todos!
Tengo un problema a la hora de realizar el reset de la base de datos con el comando rails db:reset
Me dice que
unitializated constant User::Task
USER MODEL:
classUserinclude Mongoid::Document
include Mongoid::Timestamps
devise :database_authenticatable,:registerable,:recoverable,:rememberable,:validatable field :email,type:String,default:"" field :encrypted_password,type:String,default:"" field :reset_password_token,type:String field :reset_password_sent_at,type:Time field :remember_created_at,type:Time has_many :owned_tasks,class_name:'Task' has_many :participations,class_name:'Participant'# has_many :tasks, through: :participationsdeftasks participations.includes(:task).map(&:task)endend
TASK MODEL:
classTaskinclude Mongoid::Document
include Mongoid::Timestamps
field :name,type:String field :description,type:String field :due_date,type: Date
field :code,type:String belongs_to :category belongs_to :owner,class_name:'User' has_many :participating_users,class_name:'Participant'# has_many :participants, through: :participating_users, source: :user has_many :notes,dependent::destroy validates :participating_users,presence:true validates :name,:description,presence:true validates :name,uniqueness:{case_sensitive:false} validate :due_date_validity before_create :create_code after_commit :send_email,on::create accepts_nested_attributes_for :participating_users,reject_if::all_blank,allow_destroy:truedefparticipants participating_users.includes(:user).map(&:user)enddefdue_date_validityif due_date.present?&& due_date < Date.today
errors.add(:due_date, I18n.t("task.errors.due_date"))endenddefcreate_codeself.code ="#{owner_id}#{Time.now.to_i.to_s(36)}#{SecureRandom.hex(8)}"enddefsend_emailreturn@involucrados= participants +[owner]@involucrados.eachdo|user| ParticipantMailer.with(user: user,task:self).new_task_email.deliver_now
endendend
He revisado el código y no encuentro el error... Algún problema existe con la relación entre User y Task que no consigo ver. No puedo continuar el curso con este error. Please send help! 😅