2015-03-04 3 views
0

Следующий код работает, но я не понимаю, почему.Создавать класс ruby ​​без инициализации, но с attr_accesors?

Модель: У меня есть класс, называемый Contact, который не имеет метода инициализации (т. Е. Он наследует метод initialize от класса Object по умолчанию).

class Contact 
    include ActiveModel::Model 
    attr_accessor :name, :string 
    attr_accessor :email, :string 
    attr_accessor :content, :string 

    validates_presence_of :name 
    validates_presence_of :email 
    validates_presence_of :content 
    ... 
end 

Контроллер: У меня есть ContactsController с методом «создать», который создает экземпляр класса Contact, проезжающих по некоторым параметрам с помощью метода "secure_params.

class ContactsController < ApplicationController 
    def new 
    @contact = Contact.new 
    end 

    def create 
     # THIS IS THE LINE THAT I DON'T UNDERSTAND 
     @contact = Contact.new(secure_params) 

     if @contact.valid? 

     @contact.update_spreadsheet 
     UserMailer.contact_email(@contact).deliver 
     flash[:notice] = "Message sent from #{@contact.name}." 
     redirect_to root_path 
     else 
     render :new 
     end 
end 

    private 
    def secure_params 
    params.require(:contact).permit(:name, :email, :content) 
    end 
end 

Где эти параметры идут к тому, если не существует никакого метода инициализации, который устанавливает их переменные экземпляра и поведение по умолчанию «нового» метода (унаследованный от класса Object в Руби) ничего не делает с передается в параметрах?

Почему они в конечном итоге устанавливаются как переменные экземпляра? (что-то делать с attr_accesors?)

ответ

4

Включает в себя ActiveModel::Model, который определяет метод , который устанавливает значения.

+0

Отлично! Спасибо за ответ! –

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

  • Нет связанных вопросов^_^