2016-09-08 5 views
2

У меня есть этот код, который работает, но я не совсем уверен, как это сделать?validates_confirmation_of: password

Он проверяет пароли, но как это сделать?

Я знаю, что такое attr_reader и accessor, но на самом деле не понимаю, как datamapper знает, что сравнивать: password with: password_confirmation? Какую магию выполняет datamapper?

Вот моя модель пользователя:

require 'data_mapper' 
require 'dm-postgres-adapter' 
require 'bcrypt' 

class User 

    include BCrypt 
    include DataMapper::Resource 

    property :id, Serial 
    property :username, String 
    property :email, String 
    property :password_digest, Text 

    validates_confirmation_of :password 

    attr_reader :password 
    attr_accessor :password_confirmation 

    def password=(password) 
    @password = password 
    self.password_digest = BCrypt::Password.create(password) 
    end 

end 

Вот мой контроллер пост:

post '/sign-up' do 
    new_user = User.create(:username => params[:username], :email => params[:email], :password => params[:password], :password_confirmation => params[:password_confirmation]) 
    session[:user_id] = new_user.id 
    redirect '/welcome' 
    end 
+0

Вопросы, которые вы задаете, вероятно, слишком широки. Когда я начал изучать Ruby, я ошибся в том, что сначала изучил Rails, что сильно использует DSL (Domain Specific Languages), такие как макросы 'property' и' validates' в вашем примере. Я бы настоятельно рекомендовал сначала изучить Ruby, а не определенную библиотеку, такую ​​как DataMapper. – Kris

+0

Hey Kris жаль, что я не был ясен, я на самом деле изучаю Ruby, я начинаю Rails через несколько недель. Я отметил Rails в надежде, что это расширит мою аутрич-работу, потому что они используют datamapper аналогичным образом. –

+0

Когда я реферировал Rails, я также имею в виду все библиотеки, такие как DataMapper, Sinatra и т. Д. :) – Kris

ответ

0

Ну вот docs для validates_confirmation_of

"Магия" происходит только, что данные -mapper будет искать поле с тем же именем, которое вы передали в validates_confirmation_of (в данном случае :password) с _confirmation и проверьте, равны ли они.

Например, validates_confirmation_of :email сделает datamapper поиск атрибута email_confirmation и сравните, если он равен :email.

attr_reader и attr_accessor

attr_reader и attr_acessor просто 'ярлыки', чтобы определить методы и переменные экземпляра.

  • attr_reader: создает метод, который получает атрибут
  • attr_writer: создает метод, который устанавливает атрибут
  • attr_accessor: создает как

Например:

class Person 

    attr_reader :name 
    attr_accessor :gender 

end 

То же самое:

class Person 

    def name 
    @name 
    end 

    def gender=(gender) 
    @gender = gender 
    end 

    def gender 
    @gender 
    end 

end 
+0

Большое спасибо lcguida! Это действительно помогло мне прояснить ситуацию и щелкнуть! –

+0

Рад, что я могу помочь – lcguida

Смежные вопросы