[英]Rails 4 - How to save selections from different dropdown menus in one view and passing them to controller to receive corresponding data
我是Rails的新手,刚刚开始创建我的第一个应用程序。 这个问题听起来有点奇怪。
所以我有两个下拉菜单,年份和地区,它们每个都有一些选择。 我有一个articles
控制器和模型来存储一些信息。 我正在尝试使此操作有效:
首先从“ Year”中进行选择,例如2014年。我单击2014年后,我想显示2014年数据库中的所有articles
然后,虽然“年份”(Year)下拉菜单仍在2014年,但我在“地区”(Region)下拉菜单中进行了选择,例如US,并在视图中显示了属于2014和US的文章。
是否可以在不使用ajax的情况下完成以上所有操作?
这是我的articles/index
查看代码
<!-- Region -->
<div class="dropdown">
<button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
Region
<span class="caret"></span>
</button>
<ul class="dropdown-menu" aria-labelledby="dropdownMenu1">
<li><%= link_to "All Regions", ?????_article_path(???) %></li>
<% @articles.each do |article| %>
<li>
<%= link_to article.region, ?????_article_path(???)%>
</li>
<%end%>
</ul>
</div>
<!-- Years -->
<div class="dropdown">
<button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
Year
<span class="caret"></span>
</button>
<ul class="dropdown-menu" aria-labelledby="dropdownMenu1">
<li><%= link_to "All Years", ?????_article_path(???) %></li>
<% @articles.each do |article| %>
<li>
<%= link_to article.year, ?????_article_path(???)%>
</li>
<%end%>
</ul>
</div>
这是我的ArticlesController
,它只有一个index方法
类ArticlesController <ApplicationController
def index
@articles = Article.all
end
因此,我考虑过将另一种方法称为selection
但是我不确定如何通过第二个下拉菜单的选择。
如果要主动从数据库中获取文章,则需要AJAX。 如果可以将文章和视图一起加载,可以将它们存储为预提取的JSON对象,如下所示:
<script>
var articles = <%= raw @articles.to_json %>;alert(articles);
</script>
然后手动通过此JS对象。
提示:要对JS对象的显示和呈现有更多控制,请安装eleteger.js( http://backbonejs.org/ ),然后安装boost.js查询( https://github.com/davidgtonge/backbone_query )撰写文章骨干模型(骨架.js页面上的教程非常简单且实用),articles_collection骨干集合,以您想要的方式对其进行查询,然后通过Javascript编写HTML代码并将其粘贴到页面上。 我更喜欢使用Backbone.js underscore.js模板,它们是一个很好的掌握工具。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.