想要在提交和页面重新加载后保留选定的html选项

时间:2014-03-28 14:06:59

标签: html ruby-on-rails ruby-on-rails-3

所以我看过一些类似的帖子,但是我找不到Rails。 我的问题类似于:Keep a Select Box Selected after Submit,除了成为PHP之外,答案对我想做的事情还可以。

我想要做的就是在用户选择过滤器选项并重新加载最后选择的选项保持选中状态而不是转到当前所有的默认选项。我正在使用Rails,我有Ajax和jQuery作为可行的选项来做到这一点。现在页面重新加载和过滤所有工作,但我只是希望选定的选项在重新加载后保持选中状态。我一开始想用Ajax重新加载我的表中的部分信息,但我认为这将超出我的想象。

我的表格有选项(是的,我知道它很乱我是网络应用程序的新手,所以如果有任何不相关的建议我打开):

<html>
<table class= "table table-bordered"%>
  <thead>
    <tr>
      <th>Status:</th>
      <th>Clec ID:</th>
      <th>Task ID:</th>
      <th>Task Type:</th>
      <th>Hostname:</th>
      <th></th>
    </tr>
  </thead>
  <tbody>
     <tr>
         <form action="/task_queues" method="GET"> 
            <td>
                <select name="by_status">
                  <option value="">All</option>
                  <option value="Completed">Completed</option>
                  <option value="Pending">Pending</option>
                  <option value="Failed">Failed</option>
                </select>
            </td>
            <td>
                <select name="by_clecid">
                  <option value="">All</option>
                  <% @clecids.each do |clecid| %><option value="<%= clecid %>"><%= clecid %></option><% end %> 
                </select>
            </td>
            <td>
                <select name="by_taskid">
                  <option value="">All</option>
                  <% @taskids.each do |taskid| %><option value="<%= taskid %>"><%= taskid %></option><% end %> 
                </select>
            </td>
            <td>
                <select name="by_tasktype">
                  <option value="">All</option>
                  <% @tasktypes.each do |tasktype| %><option value="<%= tasktype %>"><%= tasktype %></option><% end %> 
                </select>
            </td>
            <td>
                <select name="by_hostname">
                  <option value="">All</option>
                  <% @hostnames.each do |hostname| %><option value="<%= hostname %>"><%= hostname %></option><% end %> 
                </select>
            </td>
            <td><input type="submit"/>
            </td>
         </form> 
     </tr> 
  </tbody>
</table>

PHP答案:(我也不关心这个,因为他会生成选项)。

<select name="test">
<?php
$options = array(1 => 'Option 1', 2 => 'Option 2', 3 => 'Option 3');
foreach ($options as $key => $value) { 
   echo '<option value="' . $key . '"' . ($key == $_GET["test"] ? ' selected="selected"' : '') . '>' . $value . '</option>';
} ?>
</select>

我也怀疑你们需要看到这个,但是这里有一些控制器希望让你们对我的混乱有所了解:

class TaskQueuesController < ApplicationController
  before_action :set_task_queue, only: [:show, :edit, :update, :destroy]
  has_scope :by_status, :by_tasktype, :by_taskid,  :by_hostname, :by_clecid

def index
    @task_queues = apply_scopes(TaskQueue).all
    @task_queues = @task_queues.paginate(:page => params[:page], :per_page => 30)
    @clecids = TaskQueue.uniq.pluck(:clecid).sort
    @taskids = TaskQueue.uniq.pluck(:taskid).sort
    @tasktypes = TaskQueue.uniq.pluck(:tasktype).sort
    @hostnames = TaskQueue.uniq.pluck(:hostname).reject!(&:blank?)
end

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

Pre Preston根据您的代码添加了rails代码。

<html>
<table class= "table table-bordered"%>
  <thead>
    <tr>
      <th>Status:</th>
      <th>Clec ID:</th>
      <th>Task ID:</th>
      <th>Task Type:</th>
      <th>Hostname:</th>
    </tr>
  </thead>
  <tbody>
     <tr>
         <form action="/task_queues" method="GET"> 
          <td>
              <select name="by_status">
                 <option value="">All</option>
                 <option value="Completed">Completed</option>
                 <option value="Pending">Pending</option>
                 <option value="Failed">Failed</option>
              </select>
          </td>
          <td>
              <%= select_tag "by_clecid","<option value=\"0\">All</option>"+options_for_select(@clecids.collect {|t| [t.clecid.to_s,t.clecid]}, params[:by_clecid]  ) %>
          </td>
          <td>
              <%= select_tag "by_taskid","<option value=\"0\">All</option>"+options_for_select(@taskids.collect {|t| [t.taskid.to_s,t.taskid]}, params[:by_taskid]  ) %>
          </td>
          <td>
              <%= select_tag "by_tasktype","<option value=\"0\">All</option>"+options_for_select(@tasktypes.collect {|t| [t.tasktype.to_s,t.tasktype]}, params[:by_tasktype]  ) %>
          </td>
          <td>
              <%= select_tag "by_hostname","<option value=\"0\">All</option>"+options_for_select(@hostnames.collect {|t| [t.hostname.to_s,t.hostname]}, params[:by_hostname]  ) %>
          </td>
          <td> <input type="submit"/></td>
        </form> 
      </tr> 
  </tbody>
</table>

嗯,我建议你看看这个例子并在你的组合框上写下值,因为我不知道你想要通过strins或整数。

 http://jsfiddle.net/ashwyn/yL6w3/1/

如果代码没有用,请在我发送给您的链接上写下您想要的实际值

答案 1 :(得分:0)

普雷斯顿,我将给你一个非常简单的选择使用rails的例子。

表:

|people|
  |id| |name| |phone
   1    ABC    13245
   2    DEF    67891

控制器:

 def index
    @people = Person.all
 end

查看:

 <% form_tag :controller=>"person",:action=>"index" do %>
     <%= select_tag "people",options_for_select(@people.collect {|t| [t.name.to_s,t.id]},params[:people] ) %>
     <%= submit_tag "Search", :name => nil %>
 <% end %>

如果你使用try传递数字,你可以使用它:

 <% form_tag :controller=>"person",:action=>"index" do %>
     <%= select_tag "phone",options_for_select(@people.collect {|t| [t.phone.to_s,t.id]},params[:phone].to_i ) %>
     <%= submit_tag "Search", :name => nil %>
 <% end %>

但是,您正在使用HTML代码尝试将其与rails代码一起使用