使用attr_accesors实例化ruby类没有初始化方法?

时间:2015-03-04 18:34:34

标签: ruby-on-rails ruby railsapps learn-ruby-on-rails

以下代码有效,但我不明白为什么。

模型:我有一个名为Contact的类,它没有初始化方法(即它从默认的Object类继承了initialize方法)。

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

如果没有初始化方法将它们设置为实例变量,并且“&#39; new&#39;方法(继承自Ruby的Object类)对传入的参数没有任何作用?

为什么他们最终被设置为实例变量? (与attr_accesors有关吗?)

1 个答案:

答案 0 :(得分:4)

您包含的ActiveModel::Model定义了设置值的initialize方法。