0

選択した文字/数字で始まるモデル(Nismoと呼ばれる)のすべてのエントリを収集する関数を作成しました。

def showByLetter(letter)
    @nismosByLetter = Nismo.all :conditions => ['substr(name,1,1) = ?', letter]
end

これは「Nismo」コントローラーの中にあります。

Nismoコントローラーのインデックスビューには、ユーザーが「B」などを選択できるようにするために使用するアルファベット順のメニューがあります。これにより、showByLetter関数が実行され、その文字で始まるすべてのエントリがページに表示されます。

私の問題は、私のインデックスページでは、これをすべて実現する方法が本当にわからないことです。

<% Array('A' .. 'Z').each do |letter| %>
    <%= link_to letter, showByLetter(letter) %>
<% end %>

この「showByLetter」関数の結果を表示するには、新しいview.html.erbファイルを作成する必要があると思います。

私はプログラマティックプログラマーの本から頭を悩ませようとしましたが、ルートを正しくするためにroutes.rbファイルを追加する必要があるかもしれないというコメントをネット上で見ました。

namespace "nismo" do
    resources :nismos do
        member do
            get :showByLetter
        end
    end
end

これはすべて非常に単純だと確信していますが、混乱していて、いくつかのポインタが必要です。

どんな助けもいただければ幸いです!

ありがとう

アダム

4

1 に答える 1

1

正直なところ、これを行う最も簡単な方法は、「nismo」コントローラーのインデックスアクションです。あなたにできることは変化です

<%= link_to letter, showByLetter(letter) %>

<%= link_to letter, nismos_path(:letter => letter) %>

これにより、現在のインデックスページに戻るリンクが作成され、次のようなGETパラメータが渡されます。

yourrooturl.com/nismos?letter=A

次に、Nismoコントローラーのインデックスアクションで、ifステートメントを追加して、すべてのnismosをロードするか、文字だけでロードするかを決定します。似たようなもの:

if params[:letter].nil?
  @nismos = Nismo.all
else
  @nismos = Nismo.all :conditions => ['substr(name,1,1) = ?', params[:letter]]
end

それはあなたの問題を解決するはずであり、あなたはルートを扱う必要はありません。

于 2012-07-05T23:35:40.997 に答える