2016-06-27 7 views
1

私は開発者の問題について私の質問に答えてくれてうれしいですが、今回はもっと自明にしようとします。Sinatraドロップダウンリスト

私はSinatra Haml viewsにリダイレクトするいくつかのエンドポイントを使用しています。私のプロジェクトはソフトウェアポートフォリオに関するものなので、このクラスはソフトウェアとカテゴリです。カテゴリには、多くのソフトウェアがあります。新しいソフトウェアエントリを作成するフォームでは、デスクトップ、Web、アプリケーションの3つのカテゴリから選択できるドロップダウンリストを作成します。 そこまで、すべてが順調です。問題は、ソフトウェアリストが表示されたときに、作成したカテゴリ(既にクラスに「カテゴリを追加」しています)をフィルタリングするドロップダウンリストを配置したいのですが、フィルタを追加する方法がわかりませんソフトウェアリスト形式のフィルタボタン。あなたは私を助けてくれますか?もちろん、そこにボタンを配置する方法はわかっていますが、選択したカテゴリが一致するソフトウェアエントリのみを表示します。ここにリスト形式があります。

%select{:name => "category"} 
%option Desktop 
%option Web 
%option Device 
%input{:type => "submit", :value => "Filter", :class => "btn"} 
%ul.list 
- @sware.each do |software| 
    %div{:class =>"list-group"} 
    %a{:href =>"/software/edit/#{software.id}", :class =>"btn btn-lg btn-primary"} 
    = software.title 
    %a.pull-right(href="/software/delete/#{software.id}" class="btn btn-lg btn-danger") Delete 

ありがとうございます!あなたがindex呼び出しに引数を渡している

post '/all' do 
    index(:category) 
end 

が、index方法は、任意の引数を取りません。

答えて

0

@max pleanerが作成した点のほかに、実際にはparamsで正しいオブジェクトを呼び出すわけではありません。それはparams[:category]する必要があり、あなたはそのはるかに簡単書き換えることができる必要があります:

get '/all' do 
    halt(401,'Not Authorized, please login to continue') unless session[:admin] 
    @sware = Software.all 
    haml :sware 
end 

post '/:category' do 
    @sware = Software.title.where(categorization: {Software.categorization => params[:category]} 
    haml :index # assuming index.haml is where you want to go 
end 

次に、あなたのファイルを仮定すると、適切にインデントされ、あなたのHAMLファイルは同様に動作するはずです:もちろん

%select{:name => 'category'} 
    %option Desktop 
    %option Web 
    %option Device 
%input{:type => 'submit', :value => 'Filter', :class => 'btn'} 
%ul.list 
    - @sware.each do |software| 
     %div{:class =>'list-group'} 
      %a{:href =>"/software/edit/#{software.id}", :class =>'btn btn-lg btn-primary'} 
       = software.title 
      %a.pull-right{:href=>"/software/delete/#{software.id}" :class=>'btn btn-lg btn-danger'} Delete 

、より多くの情報を提供することができれば、問題をよりよく理解することができます。

1

あなたはこのようindexメソッドを呼び出しています。

質問に完全な誤りを含めてください。

+0

この回答に加えて、別のルートBのルートAのルートでステップを実行する場合、正しい方法は[そのページにリダイレクトする]ことです(http://www.sinatrarb .com/intro.html#Br​​owser%20Redirect)。 – Kashyap

1

indexアクションがDRY'edすることができます。

def index 
    category = case 
      when params[:Web] then :Web 
      when params[:Desktop] then :Desktop 
      when params[:Device] then :Device 
      end 

    @sware = Software.title.where(categorization: { Software.categorization => category }) 
end 

「それはうまく動作しません」問題の調査を開始するには良い場所ではありません。より多くのデバッグ情報が必要です。