0

次のコードは機能しますが、理由がわかりません。

モデル: 初期化メソッドを持たない 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 と関係がありますか?)

4

1 に答える 1