Ruby Sinatra下拉列表

Ruby Sinatra下拉列表,ruby,sinatra,haml,Ruby,Sinatra,Haml,我很高兴你回答了我关于我的开发问题的问题,这次我会尽量解释得更清楚 我有一个主app.rb,其中我使用多个端点重定向到我的Sinatra Haml视图。我的项目是关于一个软件组合的,所以我有一个类:软件和类别,其关系是:一个软件有一个类别,一个类别有多个软件。在创建新软件条目的表单中,我放置了一个下拉列表,您可以在其中选择3个不同类别:桌面、Web和应用程序。 在那之前,一切都很顺利。问题是,当软件列表出现时,我想把一个下拉列表按创建的类别进行过滤(我已经有了“添加类别”窗体及其类),但我不知道

我很高兴你回答了我关于我的开发问题的问题,这次我会尽量解释得更清楚

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

%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
调用传递一个参数,但是
index
方法不接受任何参数


请在您的问题中包含完整的错误

除了@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

当然,你能提供的信息越多,问题就越容易被理解。

索引
行动可以被干燥:

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

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

除此之外,如果您打算在另一个路由
B
内执行路由
a
下的步骤,正确的方法是。