如何创建下拉列表以过滤页面上的数据

时间:2013-12-24 01:58:29

标签: ruby-on-rails ruby-on-rails-4

我是Ruby on Rails(4.0)的新手,我正在努力寻找我试图实现的最佳方法。我一直在寻找一段时间,发现自己变得更加困惑。从本质上讲,我希望有一个主页,让用户可以使用我的需求模型填充下拉列表,当用户点击Requirements.title时,只显示那些具有相同标题的行。现在我有以下内容:

_req_dropdown.html.erb

<div id="category_select">
  <%= collection_select(:requirement, :id, Requirement.all, :id, :title, options={:prompt => "Select a requirement"}, html_options={:onchange => 'this.form.submit()'} ) %>
</div>

_req_item.html.erb

<ol id="<%= req_item.id %>">
  <span class="req_num">R<%= req_item.req_num %></span>
  <span class="title"><%= req_item.title %></span>
  <span class="description"><%= req_item.description %></span>
</ol>

static_pages_controller.rb

class StaticPagesController < ApplicationController
  def home
    if signed_in?
      @requirement = current_user.requirements.build
      @req_items = current_user.req_list.paginate(page: params[:page])
    end    
  end

user.rb

class User < ActiveRecord::Base
  def req_list
    Requirement.where("user_id = ? ", id)
  end

实施使用下拉菜单过滤数据的主页的最佳方法是什么?任何建议都会很棒,如果我没有添加足够的信息,请告诉我

1 个答案:

答案 0 :(得分:0)

您可以通过使用ajax并用新数据替换预期的div来实现此目的。我正在解释小代码片段,我希望它能帮到你。

  1. 加载默认页面,因为第一时间没有任何过滤器。

  2. 选择下拉列表 - 在更改事件上触发ajax调用并从db获取新数据。

    = select_tag('new_data', options_for_select([ "VISA", "MasterCard", "Discover" ], ["VISA", "Discover"])
    
    // replace below div
    .replace_me
    
  3. Ajax调用

    // searching the kids when session alone changes
    
    $('#new_data').live('change', function() { 
      searching_new_data()     
    }).change();
    
    function searching_new_data()
    {
      $.ajax({
        url: "/controller/methods",
        data: { new_data: $('#new_data').val(){
          $("#form_loading").show(); 
        },              
        complete: function(){  
          $('#form_loading').hide();
    
        },        
        success: function(html){ 
          $('#form_loading').hide();    
          $('#loading').empty();
          $('#loading').append(html);
        }
      })
    }
    

    控制器:

    def new_data
      // query logic will goes here
    end      
    

    查看:

    // replaced view code
    _new_data.html.haml
    

    您需求的简要流程。