0

私は間違いなくRoRでどこかに到達しています。ループに関するいくつかのことを明確にしたいだけです。

ユーザーがデータベース エントリを作成、読み取り、更新、および削除できるようにするメソッドを含む「入力」コントローラを作成しました。

HTMLフロントエンドをレンダリングする「入力」ビューもあります。ビューには次のループがあります。

<table>
<% @inputs.each do |input| %>
  <tr>
   <td><%= input.title %></td>
   <td><%= input.content %></td>
   <td><%= link_to 'Show', input %></td>
   <td><%= link_to 'Edit', edit_input_path(input) %></td>
   <td><%= link_to 'Destroy', input, method: :delete, data: { confirm: 'Are you sure?' } %>  
</td>
  </tr>
<% end %>
</table>

ループが概念的にどのように機能するかは理解していますが、これについては少し迷っています。

@inputs「コードを指す」(より良い表現方法でお願いします?) は、ループで使用されるメソッドが存在する入力コントローラーに向けられていると思います。

入力コントローラー内には、実際に「編集」、「作成」、「表示」、「破棄」などのメソッドがあります。

しかし、コントローラーには「タイトル」または「コンテンツ」メソッドはありません! 彼らはどこから来たのか?

そして、正直なところ、私は理解していません

<% @inputs.each do |input| %>

結構。

これは私が理解しようとしているものです:

@inputs = 入力コントローラーに移動

.each = 入力コントローラーで each メソッドを呼び出します。(この each メソッドはどこで定義されていますか?コントローラーで each を呼び出すとはどういう意味ですか?)

する | 入力 | = コントローラーで .each を呼び出すと、「input」というオブジェクトが生成されます。

さて、オブジェクト 'input' には確かに title や content などのメソッドが含まれていますが、これらのメソッドはどこから来ているのでしょうか?? それらは文字通りコントローラー内のどこにもありません!

とにかく、どうもありがとう。

4

3 に答える 3

2

上記のコードで示したようにビュー テンプレート内で使用する場合、ビュー テンプレートは、ビュー テンプレートをレンダリングしたコントローラー アクション内で定義され@inputsたインスタンス変数を使用しています。@inputs

InputsControllerつまり、例を使用するために、 というメソッドがあるとしましょうindex。ビュー フォルダには、対応する という名前のビュー テンプレートがありますindex.html.erb

# Inside app/controllers/inputs_controller.rb
def index
  @inputs = Input.all
end

# Inside app/views/inputs/index.html.erb
<table>
<% @inputs.each do |input| %>
  <tr>
   <td><%= input.title %></td>
   <td><%= input.content %></td>
   <td><%= link_to 'Show', input %></td>
   <td><%= link_to 'Edit', edit_input_path(input) %></td>
   <td><%= link_to 'Destroy', input, method: :delete, data: { confirm: 'Are you sure?' } %>  
</td>
  </tr>
<% end %>
</table>

メソッドが呼び出されると、Rails はデフォルトで、呼び出されたindexメソッドと同じ名前のビュー テンプレートを探します。つまり、 というビュー テンプレートを検索しますindex.html.erb

ここで示した例を使用すると@inputs、ビュー テンプレート内で使用されindex、コントローラーから呼び出されたアクションからインスタンス化されています。

@inputsさらに、変数のインスタンス化からわかるように:

@inputs = Input.all

@inputsデータベースからオブジェクトのコレクションを参照する変数です。つまり、ビュー テンプレートのループ内のこのセクションでは、次のようになります。

<% @inputs.each do |input| %>

each|input|は、コレクション内に含まれるオブジェクトの 1 つへの参照であり@inputs、これらのオブジェクトのそれぞれがデータベース オブジェクト (つまり、入力モデル) に対応します。これが、それぞれにおよび とinput呼ばれる属性がある理由です。これらはおそらく、データベースの移行でテーブルの列として定義されているためです。titlecontentInput

于 2013-05-14T14:34:29.873 に答える