Sinatra下拉列表

时间:2016-06-27 04:54:07

标签: ruby sinatra haml

我很高兴你回答了我关于我的开发问题的问题,这次我会尝试更加不言自明。

我有一个主app.rb,我使用几个端点重定向到我的Sinatra Haml视图。我的项目是关于软件组合,所以我有这个类:软件和类别,关系是:一个软件有一个类别,一个类别有很多软件。在您创建新软件条目的表单中,我放置了一个下拉列表,您可以在其中选择3个不同的类别:桌面,Web和应用程序。 在那之前,一切进展顺利。问题是,当软件列表显示时,我想要一个下拉列表来按创建的类别进行过滤(我已经有了#34;添加类别"表格及其类别)我无法计算如何在软件列表表单的“过滤器”按钮中添加过滤器。你能帮帮我吗?当然我知道如何把按钮放在那里,但我想只显示所选类别匹配的软件条目。这是列表表单。

%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

提前多多感谢!

3 个答案:

答案 0 :(得分:1)

您正在调用index方法,如下所示:

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

您正在向index调用传递参数,但index方法不接受任何参数。

请在问题中加入完整错误。

答案 1 :(得分:1)

index行动可以被干掉:

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

“它只是不起作用”不是开始调查问题的好地方。需要更多调试信息。

答案 2 :(得分: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

当然,您可以提供的信息越多,问题就越能理解。