railsでインスタンスメソッドでクラスを呼び出す際にinitializeを使うメリットってありますか?
例えば下記ののようにSessionsControllerクラスでAuthenticatorクラスのauthenticateメソッドを呼び出すのですがその時に引数をメソッドではなくクラスに設定するにするメリットはありますか?
ruby
1class Staff::Authenticator 2 def initialize(staff_member) 3 @staff_member = staff_member 4 end 5 6 def authenticate(raw_password) 7 @staff_member && 8 !@staff_member.suspended? && 9 @staff_member.hashed_password && 10 @staff_member.start_date <= Date.today && 11 (@staff_member.end_date.nil? || @staff_member.end_date > Date.today) && 12 BCrypt::Password.new(@staff_member.hashed_password) == raw_password 13 end 14end
ruby
1class Staff::SessionsController < Staff::Base 2 def create 3 @form = Staff::LoginForm.new(params[:staff_login_form]) 4 5 if @form.email.present? 6 staff_member = StaffMember.find_by("LOWER(email) = ?", @form.email.downcase) 7 end 8 if Staff::Authenticator.new(staff_member).authenticate(@form.password) 9 session[:staff_member_id] = staff_member.id 10 redirect_to :staff_root 11 else 12 render action: "new" 13 end 14 end 15end
ではなく
ruby
1class Staff::Authenticator 2 def authenticate(staff_member, raw_password) 3 staff_member && 4 !staff_member.suspended? && 5 staff_member.hashed_password && 6 staff_member.start_date <= Date.today && 7 (staff_member.end_date.nil? || staff_member.end_date > Date.today) && 8 BCrypt::Password.new(staff_member.hashed_password) == raw_password 9 end 10end
ruby
1class Staff::SessionsController < Staff::Base 2 def create 3 @form = Staff::LoginForm.new(params[:staff_login_form]) 4 5 if @form.email.present? 6 staff_member = StaffMember.find_by("LOWER(email) = ?", @form.email.downcase) 7 end 8 if Staff::Authenticator.new.authenticate(staff_member,@form.password) 9 session[:staff_member_id] = staff_member.id 10 redirect_to :staff_root 11 else 12 render action: "new" 13 end 14 end 15end
でも動作は変わらないと思うのですがどう違いますか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。