1

だから私はこのようなモデルクラスを持っています:

attr_accessible :email, :firstname, :lastname, :phones_attributes

そして、そのモデルでの検証も次のようになります。

 validates :firstname, presence: true

それらすべてが変数名の前にその「:」記号を使用していることに注意してください。

しかし、そのモデルには、次のようなメソッドがあります。

  def name
    [firstname, lastname].join(' ')
  end

では、今回は変数名の前に「:」を入力する必要がなかったのはなぜでしょうか? 違いは何ですか?

4

2 に答える 2

3

ご覧のとおり、渡すattr_accessorのは実際には変数ではなく、変数の名前です。変数の名前はシンボルであり、シンボル:nameのリテラル構文です。あなたのnameメソッドでは、名前だけでなく、実際には変数を使用しているので、いいえ:

より詳細にattr_accessorは、変数を直接使用することはありません。むしろ、名前で変数を取得するメソッドを使用しています。したがって、変数ではなく名前が必要です。

于 2013-02-23T16:41:32.323 に答える
1

シンボルを「Railsの方法」で何かを示す単純な文字列として見てください。したがって、これは次と同じです。

attr_accessible "email", "firstname", "lastname", "phones_attributes"

ただし、インスタンスメソッドnameでは、firstnameとlastnameは実際にはなどとして理解されますmodel_object.firstnamemodel_object.lastnameしたがって、コロンはありません。

于 2013-02-23T16:49:41.697 に答える