• 締切済み

rubyで単純なwebアプリに検索機能の追加をする場合

ruby初心者です。 rubyで最も単純なwebアプリを作りながら勉強しています。 DBに数個のカラムを作り、登録、修正、削除、表示させるだけのものを作って勉強しているのですが・・・ 検索の機能を追加する場合、 scaffoldで作成したコントローラ(仮にxxxs)←最初に作ったモデルの複数形 xxxs_controller.rbに def search @xxx_pages, @ = paginate :xxxs, :per_page => 10, :conditions => ["★★★ LIKE ?", params[:xxx][:検索対象のカラム名] + '%' ] @keyword = params[:xxx][:検索対象のカラム名] render :action => 'list' end を加える事と、 _form.rhtmlに <%= start_form_tag :action => 'search' %> <!-- (1) --> <%= text_field :xxx, :検索対象のカラム名, :value => @keyword %> <%= submit_tag 'Search' %> <%= end_form_tag %> 付け加えるだけでよいのでしょうか??

みんなの回答

  • lv4u
  • ベストアンサー率27% (1862/6715)
回答No.1

_form.rhtmlは、テーブルの1レコード編集用のファイルなので、検索の場合は修正対象ではないですね。 コントローラに検索用のメソッドを追加されていますので、あとは検索用のsearch.rhtmlをlist.rhtmlをコピーするなどして新規作成されたらいいと思います。 P.S. まだ私もrubyもruby on railsもmysqlも初心者で4冊の本とネットを見ながら同様なレベルを勉強中です。 InstantRailsやRadRailsをインストールしたりしてみましたが、統合化されている環境は基礎が判っていて初めて使いこなせるような気がして、MysqlやRuby,Railsをそれぞれ個別にインストールしてコマンドラインとエディターでぼちぼちとやっています。

関連するQ&A

  • rails3初心者 検索対象に別テーブルも含めたい

    ご教授よろしくお願いします。 <実装したい事> productテーブルからmakerテーブルのmaker_nameカラムも検索条件に含めたい。 (productテーブルの検索対象カラムは:codeとname ) (makerテーブルの検索対象カラムは:maker_name ) 以下のコードで試してみましたが、実装できません。 ========================= views ========================= <%=form_tag({:controller => :products,:action => :search}, :method => :get) do %> <%= text_field_tag "search_form",params[:search_form],:size =>25 %> <%= submit_tag '商品検索' %> <% end %> ======================================== products_controller.rb ======================================== def search @products =Product.find(:all, :include => :maker, :conditions =>['maker.maker_name like :value or code like :value or name like :value', {:value=> '%' +params[:search_form]+ '%'}]) end ======================================== リレーションシップ ======================================== product.rb belongs_to :maker **************************** maker.rb has_many :products **************************** どうぞよろしくお願い致します。

  • rails3初心者 金額から絞り込み検索

    rails3を勉強中です。 ご教授いただけば幸いです。 実装したい事: DBに登録してあるproductsの一覧から金額を指定して絞り込み検索をしたい 解決してない事: indexに検索結果が表示されません。 コードの書き方をご教授いただければ幸いです。 ==================== views: ==================== <%= form_tag ({:controller => :products, :action => :search_price }), {:method => :post} do %> 価格指定 <%= text_field_tag "price1" %> ~  <%= text_field_tag "price2" %> <%= submit_tag "検索"%> <% end %> ==================== products_controller.rb ==================== def search_price @products = Product.all @product = Product.new @products.each do |product| item = product.price >= params[:price1].to_i && product.price <= params[:price2].to_i if item @product = product end end render :action => 'index' end ==================== views/products/index.html ==================== <% @products.each do |product| %> <%= product.name %> <%= product.price %> <% end %>

    • ベストアンサー
    • Ruby
  • rails3初心者 複数の絞込検索

    絞り込み条件で、メーカーやカテゴリを選択してから 金額指定があれば、金額指定も含めて検索結果を実装する事はできますか? またボタンは1個にする形にしたいです。 よろしくお願い致しますm(_ _)m 絞込み検索内容 ========== ・メーカー (チェックボックス式) ・カテゴリ (チェックボックス式) ・金額指定 ========== ==================== views: ==================== <p>条件検索(複数選択可)</p> <%= form_tag ({:controller => :products, :action => :check }), {:method => :get} do %> <p>メーカーから探す</p> <% Maker.all.each do |maker|%> <%= check_box_tag "maker_id[]", maker.id, (params[:maker_id].include?(maker.id.to_s) if params[:maker_id]) %> <%= maker.maker_name %><br /> <% end %> <p>カテゴリから探す</p> <% Category.all.each do |c| %> <%= check_box_tag "category_id[]", c.id, (params[:category_id].include?(c.id.to_s) if params[:category_id]) %> <%= c.name %><br /> <% end %><br /> <%= submit_tag "検索"%> #このボタンを外してひとつのボタンにしたいです。 <% end %> <p>金額を指定して絞り込む</p> <%= form_tag ({:controller => :products, :action => :search_price }), {:method => :post} do %>  <%= text_field_tag "price1",(params[:price1] if params[:price1]) %> ~   <%= text_field_tag "price2",(params[:price2] if params[:price2]) %> <%= submit_tag "検索"%> <% end %> ==================== products_controller.rb ==================== def check @product = Product.all if params[:maker_id] && params[:category_id]   # 両方選択された場合 @products = Product.where(:category_id => params[:category_id], :maker_id => params[:maker_id] ) elsif params[:maker_id]   #makerが選択された場合 @products = Product.where(:maker_id => params[:maker_id]) if params[:maker_id] elsif params[:category_id]   #カテゴリが選択された場合 @products = Product.where(:category_id => params[:category_id]) if params[:category_id] elsif params[:maker_id] == nil && params[:category_id] == nil   #両方ともチェックがなかった場合 @products = Product.all end render :action => 'check' end def search_price @products = Product.where('price >=? AND price <=?', params[:price1],params[:price2]) @products = Product.where('price >=?', params[:price1]) if params[:price2].blank? @products = Product.where('price <=?', params[:price2]) if params[:price1].blank? render :action => 'index' end ややこしくてすみません^^; どうぞよろしくお願い致します。

    • ベストアンサー
    • Ruby
  • rails3初心者 年齢を表示する

    rails3を勉強中です。 お詳しい方、ご教授いただけたら嬉しいです。 実装したい内容 プルボンタンで年齢「20」が選ばれた場合、 その結果を出力する(非モデル) ==================== views:presons/index.html ==================== <%= form_tag :action => :age do %> <%= select("form","age", (1..100))%> <%= submit_tag "表示する"%> <% end %> ==================== presons_controller.rb ==================== def index @preson = Preson.new end def age @preson = params[:form][:age] redirect_to :action => 'index' end ==================== views:presons/index.htmlで選択された 「20」を表示したいのですが、 そのコードの書き方をご教授ください。 どうぞよろしくお願い致します。

    • ベストアンサー
    • Ruby
  • フォームで絞込み検索機能を持たせるには?

    CGIでキーワード検索システムを使用していますが、FORM等であらかじめ一部の語句だけを設定してお き、絞込み検索機能も持たせたいと考えています。ただデータを渡す際にうまくいきません。 どなたかデータの引渡しに関して、いい方法があればご教授ください。 使用想定例: <form method="POST" action="./search.cgi" enctype="multipart/form-data"> <select name="search"> <option value="" selected="selected">指定なし</option> <option value="ア行">ア行</option> 中略 <option value="ワ行">ワ行</option> </select> <select name="search"> <option value="" selected="selected">指定なし</option> <option value="Men">男性</option> <option value="Women">女性</option> </select> <select name="search">選択項目</select> は追加したいと考えています。 <input type="text" name="search" size="30" value="" /> <input type="submit" name="SUBMIT" value="検索" /> </form> タグ入力で  http://xxxx.com/search.cgi?search=ア行,Men と入力した場合、絞込み検索ができるようにはなっています。(カンマでand検索) ただ、自分の考えている例だと  http://xxxx.com/search.cgi?search=ア行&search=Men&search= のようにデータが渡されてしまい、検索対象全てがヒットしてしまいます。 フォームのNAME属性が同じものを「,」で連結する。みたいな動作ができればベストなんでしょうが 。 よろしくお願いします。

    • ベストアンサー
    • HTML
  • Rails コンボボックスの値の保持について(select_tag,c

    Rails コンボボックスの値の保持について(select_tag,collection_select) こんにちは。 Ruby on Railsで簡単な一覧検索画面を作成中の者です。 検索時の検索条件にコンボボックスを使用しており、検索後にコンボボックスの値を保持したいのですが、どうしてもできません。 どなたかお分かりの方がおられましたらご教授いただけないでしょうか。 下記、作成中のソースです。 Viewの検索条件部 <%- form_tag({:action => "search"},{:method=> "GET"}) do -%> <th class="U" align="left" width="10%"><label for="userNm">ユーザー名</label></th> <td width="90%"><%= text_field_tag :userNm, @userNm %></td>  <th class="U" align="left" width="10%"><label for="authCd">社員権限</label></th> <td width="90%">  <%= collection_select(:auth, :authCd, Auth.find(:all, :order => "AUTH_CD"), :id, :AUTH_NM, :include_blank => true) %>  <td align="center"><%= submit_tag '検索' %></td> Controllerクラス: def search #画面パラメータから検索条件を作成 c = Condition.new # ユーザー名 userNm = "" if params[:userNm] userNm = params[:userNm] c.and "USER_NM", "LIKE", "%#{userNm}%" end # コンボボックスの値を取得 if params[:auth] && !params[:auth]["authCd"].blank? c.and "AUTH_CD", params[:auth]["authCd"] end # 検索処理 @users = User.paginate(:order => "USER_ID asc", :per_page => 5, :page => params[:page], :conditions => c.where) # 検索条件保持 @userNm = params[:userNm] # コンボボックスの値が保持できない if params[:auth] @auth_authCd = params[:auth]["authCd"] end respond_to do |format| format.html # index.html.erb format.xml { render :xml => @users } end end 見づらくて申し訳ありませんが、ざっと上記のようになっています。 もう1つの検索条件であるユーザー名(userNm)は保持できるのですが、コンボボックス(社員権限)の値が保持できません。 select_tagや、selectも使ってみたのですが、どちらも同じ結果でした。 コンボボックスの条件は、Authモデルから値を読込み、一番上は空白にする。というものです。 どのように記述すれば保持できるのか色々調べてみたのですが、結局分からず仕舞いでした。。 どうぞ宜しくお願い致します。

    • ベストアンサー
    • Ruby
  • formタグのactionを切り替えたい。

    現在、formの作成で悩んでいます。 例えば (1)魚を検索(action="fish.php") (2)肉を検索(action="meat.php") (3)野菜を検索(action="vegetables.php") の3つがあり、それぞれactionが上記の様に別だとします。 これを一つのフォームで検索をしたいと考えています。 <form action="ここを切り替えたい" method="get"> <select class="" name="search_type" id="search_type"> <option value="fish">魚</option> <option value="meat">肉</option> <option value="vegetables">野菜</option> </select> <input name="search_keyword" id="search_keyword" value="" type="text"> <input src="search_button.gif" alt="検索" type="image"> </form> 上記の様なhtmlだとして、selectの選択によってactionを切り替え検索をしたいと思っています。 色々とgoogle等で検索してみたのですが、良い方法が見つからず皆様のお力をお借りしたく、投稿しました。 是非とも、ご教授とご指導を宜しくお願い致します。

  • 検索機能の作成で困っています

    perl初心者です。 perlでデータ検索の機能をHPにつけようとしています。以下のようなスクリプトを書いたのですが、どうもうまく動かず「失敗」という風に表記されます。フォームのテキストボックスに値が入っている場合はサブルーチンを走らせその値でDB検索するようにしたいのですが、値を入れて検索ボタンを押しても動きません。たぶんif文のところの書き方が間違っていると思うのですがわかりません。。どなたかご教授おねがいします。 #!/usr/bin/perl use DBI; print "Content-type: text/html\;charset=shift_jis\n\n"; print <<"__HTML__"; <html><head><title>test</title></head> <body> <form method= "post" action="test.cgi"> 商品検索<input type="text" name="search" size="30"> <input type="submit" value="検索"></form> __HTML__ if($form{'search'}){&SearchMySQL;} else { print "失敗"; } print<<"__HTMLEND__"; </table> </body></html> __HTMLEND__ exit; sub SearchMySQL{ DB検索 }

    • ベストアンサー
    • Perl
  • mod_rewriteでこんな変換はできませんか?

    動的ページを静的ページにするために.htaccessを使い次のようなURL変換をしたいと考えております。 例1) http://●●.com/tag/キーワード1 ↓ http://●●.com/search?word=キーワード1 例2) http://●●.com/tag/キーワード1/キーワード2/キーワード3 ↓ http://●●.com/search?word=キーワード1+キーワード2+キーワード3 いわゆる「はてな」のタグアーカイブの様な構造です。 只、数が固定されていれば自分でも解決できるのですが このようなキーワードが1~無限にある場合の対象方法がわかりません。 これは.htaccess上の設定だけで対処可能なのでしょうか?

  • PHPでの検索機能がうまく動きません

    PHPでの検索機能が動かなくて困っています。 <form>で入力した値を、MySQLのWHEREで条件付けて取り出したいのですがうまくいきません....。 最終的に、 1、formに検索ワードを入力 2、DBから条件にあったレコードを持ってくる 3、持ってきた値を表示 という機能にしたいのですが....。 --- --- --- --- --- --- --- --- --- --- --- --- <?php //データベースに接続 mysql_connect('xxx', 'xxx', 'xxx') or die(mysql_error()); mysql_select_db('xxx'); mysql_query('SET NAMES UTF8'); //フォームで送られてきた条件を元にSELECT文を作成 if (!empty($_POST['nm'])) { $q = $_POST['nm']; $sql = 'select * from test_tb where name like "%$q%"'; $record = mysql_query($sql) or die(mysql_error()); } ?> <html> <body> <form action="" method="post">    名前:<input type="text" name="nm">    <input type="submit" name="exec" value="検索"> </form> <?php while($row = mysql_fetch_assoc($record)): ?> <?php echo $row['id']; ?> <?php echo $row['name']; ?> <?php endwhile ?> </body> </html> --- --- --- --- --- --- --- --- --- --- --- --- エラーは表示されないのですが、結果も表示されません。 さまざまなサイトや他の方の質問、MySQLやPHPの本を参考にしたのですが うまくいかなかったのでご質問させていただきました。 プログラミング初心者の上、はじめての質問で不備があると思いますが、 どうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう