0

私の Rails アプリは基本的に、データベースに格納されている種類の辞書を表示します。これをWebページに表示するための足場を備えた基本的なRailsアプリをセットアップしましたが、これを次のように設定する方法を一生理解できません。基本的には、26 個のアルファベット文字の行が必要です。文字 (「A」など) をクリックすると、その文字の辞書エントリのみが表示されます。

私の index.html.erb ファイル:

<% for char in 'A'..'Z' %>
<%= link_to( "#{char}", "/words/lettersearch", :id => "#{char}") %>
<% end %>

これを行うための私のwords_controller.rbファイルメソッド:

def lettersearch
    @word = Word.find(:all, :conditions => ["word LIKE ?", "#{params[:word]}%"])
end

次に、@word を別のページに出力します。

私の問題は、インデックスページでどの文字をクリックしても、辞書全体が再び出力されることです。「lettersearch」メソッドを実際に実行しているようには見えないため、ルーティングに関係していることはわかっています。コントローラーの初期段階でデフォルトで定義されている「Show」メソッドを常に実行しようとしています。

これをどのようにルーティングするかを簡単に教えてくれる人はいますか? 私はレールにかなり慣れていないので、link_to の仕組みをまったくよく理解していません。

ルート.rb:

Dictionary::Application.routes.draw do
  resources :words do

  post 'search', :on => :collection
  post 'lettersearch', :on => :collection
  end

#Rest of routes.rb still commented apart from
   match ':controller(/:action(/:id))(.:format)'
4

2 に答える 2

2

というパラメーターを渡してい:idますが、コントローラーではというパラメーターを使用しています:word

また、新しい構文を使用するようにコードを更新してください

World.where(["word like ?", "#{params[:id]}%"])

また、ビューコードもきれいにすることができます

<% for char in 'A'..'Z' %>
  <%= link_to char, "/words/lettersearch", :id => char %>
<% end %>

あなたの routes ファイルには POST route to letter 検索しかありませんが、link_to は GET リクエストです。/words/:id何が起こっているのかというと、デフォルトで表示アクションである GET を介してGET リクエストがヒットし、params[:id]そのリクエストの内部は「lettersearch」になります。

于 2013-10-30T15:32:27.923 に答える
0

インデックスで検索を実行できます。それがあなたのやりたいことかもしれないと思います。インデックス コントローラーに次のように記述できます。

@orders = Order.lettersearch(params[:word])

そしてあなたのモデルで:

def lettersearch(word)

    if lettersearch
       @word = Word.find(:all, :conditions => ["word LIKE ?", "#{word}%"])
    else
       all
    end
end
于 2013-10-30T15:52:42.803 に答える