2016-06-27 2 views
1

Im рад, что вы ответили на мой вопрос о моей проблеме с разработчиками, на этот раз я постараюсь быть более понятным.Sinatra выпадающий список

У меня есть основной app.rb, где я использую несколько конечных точек, перенаправляющихся на мои представления Sinatra Haml. Мой проект посвящен портфолио программного обеспечения, поэтому у меня есть этот класс: Программное обеспечение и категория, отношения которых: одно программное обеспечение имеет один категория, а в категории есть много программ. В форме, где вы создаете новую запись в программном обеспечении, я помещаю раскрывающийся список, в котором вы можете выбирать между 3 различными категориями: Desktop, Web и App. Пока там, все идет хорошо. Дело в том, что когда появляется список программного обеспечения, я хочу поместить раскрывающийся список для фильтрации по созданным категориям (у меня уже есть форма «добавить категорию» с его классом), и я не могу понять, как добавить фильтр в кнопку «Фильтр» в форме списка программ. Можете ли вы, ребята, помочь мне, пожалуйста? Конечно, я знаю, как надеть кнопку там, но я хочу показать только записи программного обеспечения, в которых соответствует выбранная категория. Вот список.

%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 

Большое спасибо!

ответ

0

Помимо того, что создатель @max сделал это, вы фактически не вызываете нужный объект в 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 так:

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

можно передать аргумент в index вызова, но метод index не принимает никаких аргументов.

Пожалуйста, укажите полную ошибку с вашим вопросом.

+0

Добавляя к этому ответу, если вы намерены выполнить шаги под маршрутом «A» внутри другого маршрута «B», правильный способ сделать это - [перенаправить на эту страницу] (http: //www.sinatrarb .com/intro.html # Browser% 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 

«Это просто не работает» не является хорошим местом, чтобы начать исследование проблемы. Требуется дополнительная отладочная информация.

Смежные вопросы