0

В нашем приложении модели пользователя, у нас уже есть:Как структурировать модель Ruby on Rails?

attr_accessor :remember_token, :activation_token, :reset_token 
    before_save :downcase_email 
    before_create :create_activation_digest 
    before_save { self.email = email.downcase } 
    validates :first_name, presence: true, length: { maximum: 50 } 
    validates :last_name, presence: true, length: { maximum: 50 } 
    VALID_EMAIL_REGEX = /\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i 
    validates :email, presence: true, length: { maximum: 255 }, 
         format: { with: VALID_EMAIL_REGEX }, 
         uniqueness: { case_sensitive: false } 
    has_secure_password 
    validates :password, presence: true, length: { minimum: 6 }, allow_nil: true 

Теперь нам нужно добавить отношения ассоциации к модели, а именно:

has_many :roles, dependent: :destroy 
has_many :agendas, through: :roles 

Имеет ли значение, включаем ли мы последний идти ДО или ПОСЛЕ первого, в модели?

Если да, то какой рекомендуемый/предпочтительный/лучший способ?

+1

Нет, это не имеет значения. Предпочтительный способ является наиболее читаемым. Обычно ассоциации в одном разделе, проверки в другом, обратные вызовы в другом. И будьте последовательны. – osman

+0

Отлично, спасибо. –

ответ

2

Это не имеет значения, но важная вещь должна быть последовательной. Обычная передовая практика заключается в том, чтобы сначала сделать все возможное, чтобы объявить структуру класса, прежде чем вы входите в любые рабочие данные. Например:

class User < ActiveRecord::Base 
    attr_accessor :remember_token, :activation_token, :reset_token 

    has_many :roles, dependent: :destroy 
    has_many :agendas, through: :roles 

    before_save :downcase_email 
    before_create :create_activation_digest 
    before_save { self.email = email.downcase } 
    validates :first_name, presence: true, length: { maximum: 50 } 
    validates :last_name, presence: true, length: { maximum: 50 } 
    VALID_EMAIL_REGEX = /\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/ 
    validates :email, presence: true, length: { maximum: 255 }, 
        format: { with: VALID_EMAIL_REGEX }, 
        uniqueness: { case_sensitive: false } 
    has_secure_password 
    validates :password, presence: true, length: { minimum: 6 }, allow_nil: true 
end 

Опять же, это всего лишь один способ сделать что-то, но это очень распространено среди приложений Rails.

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