0

このルビーコードはオーバービューに与えられました。私はまだRuby on Railsに慣れていません。私はJavaのバックグラウンドを持っています。

User.rb で:

  def last_name=name
    require 'debugger'; debugger
    self[:last_name] = name
  end

そして、これはセッターメソッドだと教えてくれました。彼らは、これが次の行の「フォーム」で実行されると私に言いました:

<%= f.label :last_name%>
<%= f.text_field :last_name %>

Ok。このばかげた構文がどのように有効であるかを誰かが明確にすることができますか?

1) クラス "User" のインスタンスは初期化されません。メソッドはどのように呼び出されますか?

2) 変数「名前」はどこから来たのですか? それの価値は何ですか?(変数名は他では呼び出されません) そして、この構文は何を表していますか? "def last_name=name" ?? 初期化されていない変数をメソッドに渡しますか? もう2つの記号を入力するのを節約するためだけに、別の構文のショートカットですか?

3) このメソッドはどのようにフォームで呼び出すことができますか? "User.last_name("David") などは表示されません。

誰かがそれらのコードを明確にしてくれませんか? また、チュートリアルなどへのリンクを投稿しないでください。このコードを明確にするだけです

4

3 に答える 3

1

あなたが説明したコード:

<%= f.label :last_name%>
<%= f.text_field :last_name %>

..デフォルトの Rails テンプレート エンジンで使用されます。ビューコードです。

1) フォームが送信されると、User インスタンスが初期化され、入力される可能性があります。

フォーム アクションは、適切なコントローラー アクションに対応し:last_name、パラメーターとして受け入れられる可能性があります。フォームを送信すると、コントローラー アクションはおそらく User インスタンスをインスタンス化します。ただし、これ以上のコードがなければ、あなたのアプリケーションがそうであると 100% 確信することはできません。

2) 変数nameは、メソッドによって受け入れられた引数から取得されlast_nameます。

おそらく、メソッドを理解するのに役立つように、書き直してみましょう。

def last_name= (name)
  require 'debugger'; debugger
  self[:last_name] = name
end

またはがこのメソッドを実行しますlast_name=('John Doe')last_name = 'John Doe'

3) 私の以前の説明は、これを理解するのに役立つと思います..

于 2012-09-28T16:07:15.220 に答える
0
  1. MVC。アクション new では、User の新しいインスタンスが作成され、フォームに使用される @user に割り当てられます。

  2. 名前はメソッド宣言に由来しますdef last_name=name

  3. フォーム ヘルパーは、その変数に値を割り当てるときに last_name=name を実行し、セッターを使用してそれを実行します。オブジェクトを編集すると、getter を使用してその値がテキスト フィールドに表示されます。

于 2012-09-28T16:04:06.023 に答える
0

この構文を使用すると、ポイント 2 をよりよく理解できます。

def last_name=( name )
end

=は関数名の一部です。

Cの同等物は

void last_name_equals( char *name ) {}

あとは Rails チュートリアルの仕事です。

于 2012-09-28T16:07:39.710 に答える