Ruby onRails-ビュー

Railsビューは、相互にアクセス可能な変数を介してコントローラーとデータを共有するERbプログラムです。

ライブラリアプリケーションのapp / viewsディレクトリを見ると、作成したコントローラごとに1つのサブディレクトリbookが表示されます。これらの各サブディレクトリは、同じ名前のコントローラーが生成スクリプトで作成されたときに自動的に作成されました。

Railsは、新しいメソッドごとにビューファイルを作成する必要があることを通知します。コントローラで定義する各メソッドには、対応するメソッドが必要です。erb メソッドと同じ名前のファイル。メソッドが収集しているデータを表示します。

それでは、book_controller.rbで定義したすべてのメソッドのビューファイルを作成しましょう。これらのビューを実行しながら、これらのアクションがデータベースに適用可能かどうかを同時に確認してください。

リストメソッドのビューファイルの作成

というファイルを作成します list.html.erbお気に入りのテキストエディタを使用して、app / views / bookに保存します。ファイルを作成して保存したら、Webブラウザを更新します。空白のページが表示されます。そうでない場合は、ファイルのスペルをチェックして、コントローラーのメソッドとまったく同じであることを確認してください。

次に、実際のコンテンツを表示します。次のコードをlist.html.erbに入れましょう。

<% if @books.blank? %>
<p>There are not any books currently in the system.</p>
<% else %>
<p>These are the current books in our system</p>

<ul id = "books">
   <% @books.each do |c| %>
   <li><%= link_to c.title, {:action => 'show', :id => c.id} -%></li>
   <% end %>
</ul>

<% end %>
<p><%= link_to "Add new Book", {:action => 'new' }%></p>

実行されるコードは、@ books配列にオブジェクトが含まれているかどうかを確認することです。ザ・.blank?メソッドは、配列が空の場合はtrueを返し、オブジェクトが含まれている場合はfalseを返します。この@booksオブジェクトは、listメソッド内のコントローラーで作成されました。

<%=%>タグ間のコードは link_toメソッド呼び出し。link_toの最初のパラメーターは、<a>タグの間に表示されるテキストです。2番目のパラメーターは、リンクがクリックされたときに呼び出されるアクションです。この場合、それはshowメソッドです。最後のパラメーターは、paramsオブジェクトを介して渡される本のIDです。

ここで、ブラウザを更新してみてください。ライブラリに本がないため、次の画面が表示されます。

新しいメソッドのビューファイルの作成

今まで、図書館には本がありません。システムで数冊の本を作成する必要があります。それでは、に対応するビューを設計しましょう。new book_controller.rbで定義されているメソッド。

お気に入りのテキストエディタを使用してnew.html.erbというファイルを作成し、app / views / bookに保存します。new.html.erbファイルに次のコードを追加します。

<h1>Add new book</h1>

<%= form_tag :action => 'create' do %>
<p><label for = "book_title">Title</label>:

<%= text_field 'books', 'title' %></p>
<p><label for = "book_price">Price</label>:

<%= text_field 'books', 'price' %></p>
<p><label for = "book_subject_id">Subject</label>:

<%= collection_select(:books, :subject_id, @subjects, :id, :name, prompt: true) %></p>
<p><label for = "book_description">Description</label><br/>

<%= text_area 'books', 'description' %></p>
<%= submit_tag "Create" %>

<% end -%>
<%= link_to 'Back', {:action => 'list'} %>

ここに form_tagメソッドは、提供されたすべての情報を使用して、Rubyコードを通常のHTML <form>タグに解釈します。たとえば、このタグは次のHTMLを出力します-

<form action = "/book/create" method = "post">

次の方法は text_field<input>テキストフィールドを出力します。text_fieldのパラメーターは、オブジェクトとフィールド名です。この場合、オブジェクトは本であり、名前はタイトルです。

Railsメソッドと呼ばれる collection_select、@ booksなどの配列から構築されたHTML選択メニューを作成します。次の5つのパラメータがあります-

  • :book−操作しているオブジェクト。この場合、それは本のオブジェクトです。

  • :subject_id −本が保存されたときに入力されるフィールド。

  • @books −使用しているアレイ。

  • :id−データベースに保存されている値。HTMLに関しては、これは<option>タグのvalueパラメーターです。

  • :name−ユーザーがプルダウンメニューに表示する出力。これは、<option>タグ間の値です。

次に使用されるのは submit_tag、フォームを送信する<input>ボタンを出力します。最後に、end 単に</ form>に変換されるメソッド。

ブラウザに移動して、 http://localhost:3000/book/new. これにより、次の画面が表示されます。

このフォームにデータを入力し、[作成]ボタンをクリックします。ここで私はフィールドに次の詳細を追加しました-

Title: Advance Physics
Price: 390
Subject: Physics
Description: This is test to create new book

クリックすると Create ボタン、それは呼び出すでしょう create このメソッドはどちらかを使用しているため、ビューを必要としません。 list または new結果を表示する方法。したがって、[作成]ボタンをクリックすると、データが正常に送信され、リストページにリダイレクトされます。このページには、次のように1つのアイテムがリストされています。

リンクをクリックすると、showメソッドのテンプレートファイルがまだ作成されていないため、別のテンプレートがありませんというエラーが表示されます。

showメソッドのビューファイルの作成

このメソッドは、ライブラリで利用可能なすべての本に関する完全な詳細を表示します。app / views / bookの下にshow.html.erbファイルを作成し、次のコードを入力します-

<h1><%= @book.title %></h1>

<p>
   <strong>Price: </strong> $<%= @book.price %><br />
   <strong>Subject :</strong> <%= @book.subject.name %><br />
   <strong>Created Date:</strong> <%= @book.created_at %><br />
</p>

<p><%= @book.description %></p>

<hr />

<%= link_to 'Back', {:action => 'list'} %>

関連するオブジェクトからデータを簡単にプルできるアソシエーションを最大限に活用するのはこれが初めてです。

使用される形式は @variable.relatedObject.column。この場合、@ book変数を使用してサブジェクトの名前の値をプルできます。belongs_to協会。リストされているレコードをクリックすると、次の画面が表示されます。

編集方法用のビューファイルの作成

edit.html.erbという名前の新しいファイルを作成し、app / views / bookに保存します。次のコードを入力します-

<h1>Edit Book Detail</h1>

<%= form_for @book, :url =>{:action => "update", :id =>@book} do |f| %>

<p>Title: <%= f.text_field 'title' %></p>
<p>Price: <%= f.text_field  'price' %></p>
<p>Subject: <%= f.collection_select :subject_id, Subject.all, :id, :name %></p>
<p>Description<br/>

<%= f.text_area 'description' %></p>
<%= f.submit "Save changes" %>
<% end %>

<%= link_to 'Back', {:action => 'list' } %>

このコードは、 new IDを作成および定義する代わりに、更新されるアクションを除くメソッド。

このシナリオでは、 form_forフォームアクションのタグ。それはより良いパフォーマンスになりますform_tag。モデルとの相互作用が簡単に作成されるためです。したがって、モデルとフォームフィールド間の相互作用が必要な場合は、form_forタグを使用することをお勧めします。

この時点で、いくつかの変更が必要です。 list method'sファイルを閲覧する。<li> </ li>要素に移動し、次のように変更します-

<li>
   <%= link_to c.title, {:action => "show", :id => c.id} -%>
   <b> <%= link_to 'Edit', {:action => "edit",
   :id => c.id} %></b>
</li>

今、を使用して本を閲覧してみてください http://localhost:3000/book/list. それはあなたと一緒にすべての本のリストを提供します Editオプション。[編集]オプションをクリックすると、次の画面が表示されます-

次に、この情報を編集して、[変更保存]ボタンをクリックします。これにより、updateコントローラファイルで利用可能なメソッドであり、変更されたすべての属性を更新します。に注意してくださいupdate メソッドはどちらかを使用しているため、ビューファイルは必要ありません show または edit その結果を表示する方法。

削除メソッドのビューファイルの作成

Ruby onRailsを使用してデータベースから情報を削除するのはほとんど簡単です。このメソッドはを使用しているため、deleteメソッドのビューコードを記述する必要はありません。list結果を表示するメソッド。それでは、list.html.erbをもう一度変更して、削除リンクを追加しましょう。

<li> </ li>要素に移動し、次のように変更します-

<li>
   <%= link_to c.title, {:action => 'show', :id => c.id} -%>
   <b> <%= link_to 'Edit', {:action => 'edit', :id => c.id} %></b>
   <b> <%= link_to "Delete", {:action => 'delete', :id => c.id},
      :confirm => "Are you sure you want to delete this item?" %></b>
</li>

ザ・ :confirmパラメータは、アクションを本当に実行するかどうかを尋ねるJavaScript確認ボックスを表示します。ユーザーが[OK]をクリックすると、アクションが続行され、アイテムが削除されます。

今、を使用して本を閲覧してみてください http://localhost:3000/book/list. それはあなたと一緒にすべての本のリストを提供します Edit そして Delete 次のようなオプション-

[削除]オプションを使用すると、リストされているレコードを削除できます。

show_subjectsメソッドのビューファイルの作成

app / views / bookディレクトリに新しいファイルshow_subjects.html.erbを作成し、それに次のコードを追加します-

<h1><%= @subject.name -%></h1>

<ul>
   <% @subject.books.each do |c| %>
   <li><%= link_to c.title, :action => "show", :id => c.id -%></li>
   <% end %>
</ul>

あなたは、単一の主題の多くの本のリストを反復することによって、関連付けを利用しています。

次に、show.html.erbのSubject:行を変更して、件名リストにリンクが表示されるようにします。

<strong>Subject: </strong> <%= link_to @book.subject.name,
:action => "show_subjects", :id => @book.subject.id %><br />

これにより、インデックスページに件名のリストが出力されるため、ユーザーはそれらに直接アクセスできます。

変更 list.html.erb ファイルの先頭に以下を追加するには-

<ul id = "subjects">
   <% Subject.find(:all).each do |c| %>
   <li><%= link_to c.name, :action => "show_subjects", :id => c.id %></li>
   <% end %>
</ul>

次に、http:// localhost:3000 / book / listを使用して本を閲覧してみてください。リンク付きのすべての主題が表示されるので、その主題に関連するすべての本を閲覧できます。

次は何ですか?

Railsのすべての操作に慣れていることを願っています。

次の章では、使用方法について説明します Layoutsより良い方法でデータを配置します。RailsアプリケーションでCSSを使用する方法を紹介します。