Rails: Todo 検索その弐: 検索結果の表示2006年11月27日 14時41分43秒

前回からの続き。前回は、ユーザの入力を受け取れた。

後で気が付いたのだが、


def add_item 
  render_text @params.inspect
end

の例が、TodoListTutorial にあった。見落としていたらしい。

さて、@params[:user][:keyword] で検索語が得られるのが判った。次は、SQL に渡せば良い。find_by_sql の他にも、色々な簡略系があるらしい。しかし、何を省略して良いのか、何が必須なのかが、一目で判らないので、全ての SQL を記述している。

app/controller/todos_controller.rb に以下のコードを追加。@keyword は特に必須では無いが、参照したいときの為に、抜き出してある。


  def result
    @keyword = @params[:user][:keyword]
    @matches = Todo.find_by_sql("select * from todos where description " + \
      "like '%" + @keyword + "%'")
  end

SQL が長くなりすぎて、一行に入り切らなくなって、二行に折り返したら、エラーがでた。バックスラッシュを加えたら、エラーが出なくなった。

次は表示だ。app/views/todos/list.rhtml とコードはほぼ同じで、参照する変数の名前だけ変えれば、望んでいることは全て実現できる。実は、todos_controller.rb の変数の名前を変えて、render :partial を使っても良いのかも知れないが、今回は業とこうすることにした。


<table>
  <tr>
  <% for column in Todos.content_columns %>
    <th><%= column.human_name %></th>
  <% end %>
  </tr>

<% for todo in @matches %>
  <tr>
  <% for column in Todo.content_columns %>
    <td><%=h todo.send(column.name) %></td>
  <% end %>
    <td><%= link_to 'Show', :action => 'show', :id => todo %>&
lt;/td>
    <td><%= link_to 'Edit', :action => 'edit', :id => todo %>&
lt;/td>
    <td><%= link_to 'Destroy', { :action => 'destroy', :id => todo }, :confirm => 'Are you sure?', :post => true %></td>
  </tr>
<% end %>
</table>

todo.send(column.name) の行にある <%=h は、何だろう。

実験にて、検索語を含む項目のみ result ページに表示されるのを確認した。

前回次回

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2006/11/27/971928/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。