实例化一个 ruby class 没有初始化方法但使用 attr_accesors?
Instantiate a ruby class no initialize method but with attr_accesors?
以下代码有效,但我不明白为什么。
模型:我有一个名为 Contact 的 Class,它没有初始化方法(即它从默认对象 class 继承了初始化方法)。
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
控制器:我有一个带有 'create' 方法的 ContactsController,它实例化 Contact class 通过 '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
如果没有将它们设置为实例变量的初始化方法和 'new' 方法的默认行为(继承自 Ruby 的对象 class) 对传入的参数不执行任何操作?
为什么它们最终被设置为实例变量? (与attr_accesors有关?)
您包括 ActiveModel::Model
,它定义了设置值的 initialize 方法。
以下代码有效,但我不明白为什么。
模型:我有一个名为 Contact 的 Class,它没有初始化方法(即它从默认对象 class 继承了初始化方法)。
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
控制器:我有一个带有 'create' 方法的 ContactsController,它实例化 Contact class 通过 '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
如果没有将它们设置为实例变量的初始化方法和 'new' 方法的默认行为(继承自 Ruby 的对象 class) 对传入的参数不执行任何操作?
为什么它们最终被设置为实例变量? (与attr_accesors有关?)
您包括 ActiveModel::Model
,它定义了设置值的 initialize 方法。