写経 (10分で作るRailsアプリ) その 2
これくらいガンガン作らねば、と思いつつも進捗微妙。とりあえず気づきをメモ。あまり参考にはならないと思います。
一覧な view の修正
とりあえず、一件データを追加してみたんですが、テキストにある通り
という不具合がぱっと見あり。
テキストによる解ではテーブルから定義リストにしています。微妙な気もするが、とりあえず写経ってコトで。とりあえず、現時点の写経な実行結果は略されているらしいんで微妙に先走ったコードを以下に。
app/views/item/list.rhtml
<dl> <% for item in @items %> <dt><a href="<%=h item.url %>"><%=h item.title%></a></dt> <dd><%=h item.description %> <%= link_to '[Edit]', {:action => 'edit', :id => item} %> <%= link_to '[x]', {:action => 'destroy', :id => item}, :confirm => 'Are you sure?' %> </dd> <% end %> </dl> <%= link_to 'Previous page', { :page => @item_pages.current.previous } if @item_pages.current.previous %> <%= link_to 'Next page', { :page => @item_pages.current.next } if @item_pages.current.next %> <br /> <%= link_to 'New item', :action => 'new' %>
上記リストを見て分かるのが、
- 表示されているページを管理しているのが、@item
- ページ遷移なナニを管理しているのが、@item_pages
てのが見てとれます。
あと、link_to というメソッドについてはきちんとチェキ入れる必要あり、かも。
# link_to の api リファレンス
validation
AWDwR に validation のナニが出ていたような記憶がオボロげにあるが忘却の彼方。とりあえずここでは写し書きを (こら
app/models/item.rb
class Item < ActiveRecord::Base validates_presence_of :url, :title validates_format_of :utl, :with => /:\/\// validates_length_of :description, :within => 0..512 end
エラーメセジの日本語化については以下を参考に、との記述あり。(わしもブックマークしてると思う)
ヽ( ・∀・)ノきゅまきゅまー
てか、この記事って masuidrive の人が書いてるのか。
検索
これも理屈では簡単なコトが分かっていたのですが実装見ておったまげ、ですな。しかし結構前からいぢくり回す、と言いつつも今さらなナニが本当に情けなひ。
で、これも写経ベースで、と思っていたら
- UTF な環境が微妙でハマった
- テキストボックスが表示されぬ、と思ってたらタグが imput になってた (恥
とゆー微妙なナニが ...
一応以下にコードを。
app/controllers/item_controller.rb (の一部)
def list if @params[:keyword] keyword = "%"+@params[:keyword]+"%" @item_pages, @items = paginate :item, :per_page => 10, :conditions => [" url LIKE ? OR title LIKE ? OR description LIKE ?", keyword, keyword, keyword] else @item_pages, @items = paginate :items, :per_page => 10 end end
:conditions に設定している配列は最初の要素の ? がそれ以降の要素で置き換えられるとの事。同時にエスケープ処理も実行されるとの事。きちんと調べた方が良いな。と言うのもこの機能は SQL インジェクション対策にも有効、とある。それにしても至れり尽くせりだなぁ。
app/view/item/list.rhtml
<%= form_tag :action => "list" %> キーワード: <input name="keyword" value="<%=h @params[:keyword] %>"/> <%= submit_tag "検索" %> <%= end_form_tag %> <dl> <% for item in @items %> <dt><a href="<%=h item.url %>"><%=h item.title%></a></dt> <dd><%=h item.description %> <%= link_to '[Edit]', {:action => 'edit', :id => item} %> <%= link_to '[x]', {:action => 'destroy', :id => item}, :confirm => 'Are you sure?' %> </dd> <% end %> </dl> <%= link_to 'Previous page', { :page => @item_pages.current.previous, :keyword => @params[:keyword] } if @item_pages.current.previous %> <%= link_to 'Next page', { :page => @item_pages.current.next, :keyword => @params[:keyword] } if @item_pages.current.next %> <br /> <%= link_to 'New item', :action => 'new' %>
次は login_generator の実装らしい。