在这里输入noob。我正在尝试创建一个下拉菜单,用于在视图中选择“年”并将此值传递给我的控制器,以便我可以从数据库中找到相应的数据。
我不确定正确的过程是什么。到目前为止,我已经在视图中使用“select_year()”创建了一个下拉菜单,该链接基本上指向控制器操作“索引”并尝试执行AJAX,并使用“index.js.erb”渲染结果进入当前视图。
但是,我不确定如何从“select_year()”选择中获取值,并且我应该将此值传递给我的控制器以查找数据或的模型?
请随意指出我在AJAX过程的其余部分可能出现的任何错误,我无法测试它,因为我甚至无法从视图中获取值到控制器......
articles_controller.rb
class ArticlesController < ApplicationController
def index
@articles = Article.all
@articleSelect = Article.find(???????????)
# Would this be correct? @a = Article.find(params[:foo])
respond_to do |format|
format.js # render articles/index.js.erb
end
end
index.html.erb
<div class="container-fluid">
<div class="main">
<!-- Year -->
<%= select_year (Date.today, start_year: 1960, end_year: 2016, prompt: 'Choose a Year...') %>
<!-- I thought adding a field_name: "year" would help me to identify the value in the controller but it didn't work. -->
<%= link_to "Show", articles_path, remote: true %>
<div id="show">
<%= render @dropDownResults %>
</div>
</div>
</div>
index.js.erb的
$('#show').append("<%= j render @dropDownResults %>");
_dropDownResults.html.erb
<div>
<% @articleSelect.each do |a| %>
<h1><%= a.title %></h1>
<h2><%= a.author %></h2>
<h3><%= a.year %></h3>
<% end %>
</div>
非常感谢任何帮助或建议!
答案 0 :(得分:1)
您可以将此功能添加到您的视图中:
<script type="text/javascript">
function refreshDivShow (){
$.ajax({
type: 'POST',
dataType: "script",
url: "<%= articles_path %>?authenticity_token=" + $('meta[name=csrf-token]').attr('content'),
data: {
year: $('#yourYearInput').val()
}
});
}
</script>
并且可以从控制器函数year
访问index
参数的值
params[:year]
或来自部分index.js.erb
或_dropDownResults.html.erb
注入
<%= params[:year] %>
答案 1 :(得分:0)
尝试使用remote:true
使用表单提交您选择的值。尝试更改您的代码,如下所示:
<div class="container-fluid">
<div class="main">
<%= form_tag(articles_path,:method=>'get', :remote => "true") do %>
<%= select_year (Date.today, start_year: 1960, end_year: 2016, prompt: 'Choose a Year...') %>
<%= submit_tag "Show" %>
<% end %>
<div id="show">
<%= render @dropDownResults %>
</div>
</div>
</div>
通过这种方式,您可以获得所需的结果。或者您可以在下拉列表更改事件中触发ajax并相应地更改代码。使用当前代码,您无法使用link_to标记将所选选项发送到索引。