次のコードは機能しますが、理由がわかりません。
モデル: 初期化メソッドを持たない Contact というクラスがあります (つまり、デフォルトのオブジェクト クラスから初期化メソッドを継承します)。
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
コントローラー: 「secure_params」メソッドを介していくつかのパラメーターを渡す Contact クラスをインスタンス化する「create」メソッドを持つ ContactsController があります。
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 の Object クラスから継承) のデフォルトの動作が渡されたパラメータに対して何もしない場合、このパラメータはどこに行くのでしょうか?
それらがインスタンス変数として設定されるのはなぜですか? (attr_accesors と関係がありますか?)