Ruby on rails Rails 4-如何将“select_year()”的值从视图传递给控制器

Ruby on rails Rails 4-如何将“select_year()”的值从视图传递给控制器,ruby-on-rails,ajax,Ruby On Rails,Ajax,这里没有人。我正在尝试创建一个下拉菜单,用于在视图中选择年份,并将该值传递给我的控制器,以便从数据库中找到相应的数据 我不确定正确的流程是什么。到目前为止,我已经在视图中创建了一个下拉菜单,使用select_year和一个基本上指向控制器操作索引的链接,尝试使用AJAX,并让Index.js.erb将结果呈现到当前视图上 但是,我不确定如何从我使用select_year所做的选择中获取值,我应该将该值传递给我的控制器以查找数据还是传递给模型 请随时指出我在AJAX过程的其余部分中遇到的任何潜在错

这里没有人。我正在尝试创建一个下拉菜单,用于在视图中选择年份,并将该值传递给我的控制器,以便从数据库中找到相应的数据

我不确定正确的流程是什么。到目前为止,我已经在视图中创建了一个下拉菜单,使用select_year和一个基本上指向控制器操作索引的链接,尝试使用AJAX,并让Index.js.erb将结果呈现到当前视图上

但是,我不确定如何从我使用select_year所做的选择中获取值,我应该将该值传递给我的控制器以查找数据还是传递给模型

请随时指出我在AJAX过程的其余部分中遇到的任何潜在错误,我无法对其进行测试,因为我甚至无法从view到controller获取值

文章\u controller.rb

index.html.erb

index.js.erb

_dropDownResults.html.erb


任何帮助或建议都将不胜感激

尝试使用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 tag的索引。

您可以将此功能添加到视图中:

<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>
或者通过注入从partials index.js.erb或_dropDownResults.html.erb

<%= params[:year] %>

您介意将AJAX调用添加到视图代码中吗?答案是改变那里的一些东西。哦,我明白了,我想通过简单地在link\u to中添加remote:true,并在controller中添加respond\u to就足以进行AJAX调用。那么您是说,对于我所做的每个AJAX调用,我都应该直接将其添加到视图中?是吗?这将使您的生活更轻松,因为您打算使用参数,将AJAX调用放在一个单独的函数中,正如我在回答中所描述的那样。如果你愿意的话,你可以把它放在article.js文件中,而不是视图中。谢谢你的输入!因此,使用您的方法,我将能够执行:@articleSelect=Article.findparams[:year]?是的,它将在控制器操作中为所选值提供params[:year]。您好,所以我尝试访问上述params[:year],它给了我此错误,我不认为由于某种原因传递了所选的值:通过ArticlesControllerindex作为HTML文章进行处理加载1.0ms选择文章。*其中articles.id=?限制1[[id,nil]]在5ms ActiveRecord中找不到完成的404:1.0ms ActiveRecord::RecordNotFound找不到id为的文章:app/controllers/articles\u controller.rb:6:在索引中,`它不会给你文章id。像文章一样尝试。其中:year=>params[:year]。年份应该是YOUR文章表中的一列。尝试将params[:year]放入控制器中,看看它是否能让您采取正确的操作,也能为您提供正确的params值谢谢,以前的错误现在消失了。然而,当我在本地rails服务器上测试它时,form_标记根本没有出现。它没有为我生成html标记。
<div>
    <% @articleSelect.each do |a| %>
        <h1><%= a.title %></h1>
        <h2><%= a.author %></h2>
        <h3><%= a.year %></h3>
    <% end %>
</div>
<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>
<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>
params[:year]
<%= params[:year] %>