我很高兴你回答了我关于我的开发问题的问题,这次我会尝试更加不言自明。
我有一个主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
提前多多感谢!
答案 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
当然,您可以提供的信息越多,问题就越能理解。