Ok, quindi penso di ottenere ciò che super does
standalone. Fondamentalmente in Devise, se , quindi su qualsiasi azione, avendo un super
chiamerà prima la logica per la stessa azione denominata nel genitore Devise::RegistrationsController
, prima di chiamare ciò che hai scritto.Differenza tra "super" e "super do | u |" utilizzando il contesto di Devise
In altre parole ...
class Devise::RegistrationsController
def new
puts "this is in the parent controller"
end
end
class Users::RegistrationsController < Devise::RegistrationsController
def new
super
puts "this is in the child controller"
end
end
# Output if users#new is run would be:
# => "this is in the parent controller"
# => "this is in the child controller"
# If super were reversed, and the code looked like this
# class Users::RegistrationsController < Devise::RegistrationsController
# def new
# puts "this is in the child controller"
# super
# end
# end
# Then output if users#new is run would be:
# => "this is in the child controller"
# => "this is in the parent controller"
Quello che mi incuriosisce è che ho visto alcune persone lo fanno:
class Users::RegistrationsController < Devise::RegistrationsController
def new
super do |user|
puts "something"
end
end
end
Sto avendo un momento difficile confezionamento mia gira intorno a ciò che sta facendo il do block
. Nel mio caso, dopo aver creato la risorsa (l'utente), voglio chiamare un metodo aggiuntivo su quella risorsa (l'utente).
codice attuale:
class Users::RegistrationsController < Devise::RegistrationsController
def new
super do |user|
user.charge_and_save_customer
puts user.inspect
end
end
end
Mi chiedo solo se questo sarebbe diverso che farlo:
class Users::RegistrationsController < Devise::RegistrationsController
def new
super
resource.charge_and_save_customer
puts resource.inspect
end
end
Nel caso in cui è utile, ho incluso il codice genitore Devise::RegistrationsController
qui di seguito:
def new
build_resource({})
set_minimum_password_length
yield resource if block_given?
respond_with self.resource
end
bene il loro 'metodo new' prende un blocco (da qui il' yield') – Anthony