【问题标题】:remote search form in rails 3Rails 3中的远程搜索表单
【发布时间】:2012-11-08 03:48:00
【问题描述】:

我正在尝试实现一个简单的异步搜索表单,该表单将使用 AJAX 在同一页面上显示搜索结果。我的代码如下。使用局部视图呈现搜索结果。提交表单后,我重新创建了一个结果数组并希望它显示在页面上。但这没有发生,页面没有更新。我一直在看rails 一天,我认为这很简单,但我需要帮助。

路线:

match 'search' => 'search#index'

控制器:

class SearchController < ApplicationController
  def index
    @results = params[:search] ? ['test0', 'test1', 'test2'] : []
  end
end

查看index.html.erb:

<%= form_tag search_path, :method => :get, :remote => true do %>
  <%= text_field_tag :search %>
  <%= submit_tag 'Search' %>
<% end %>
<div id="results">
  <%= render :partial => 'results' %>
</div>

部分视图_results.html.erb

<ul>
  <% @results.each do |result| %>
    <li>
      <%= result %>
    </li>
  <% end %>
</ul>

【问题讨论】:

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


    【解决方案1】:

    我需要一个对应于表单视图的视图:index.js.erb

    $('#results').html("<%= escape_javascript(render :partial => 'results') %>");
    

    【讨论】:

      【解决方案2】:

      你使用了三元运算符:

      @results = params[:search] ? ['test0', 'test1', 'test2'] : []
      

      它的语法是:

      If Condition is true ? Then value X : Otherwise value Y
      

      但这不是条件:@results = params[:search],它只是赋值。你需要提供一个条件,表达式返回truefalse,如果true你的@result将有['test0', 'test1', 'test2'],如果为false则为空。

      三元运算符示例:

      irb(main):182:0> name = "akonsu"
      => "akonsu"
      irb(main):183:0> name == "akonsu" ? "Hello akonsu" : "Who are you?" 
      => "Hello akonsu"
      

      【讨论】:

      • 实际上,他以正确但可能令人困惑的方式使用三元运算符。 params[:search] 实际上是一个被隐式转换为 true(存在对象)或 false(nil)的表达式。这个想法是他只是在模拟搜索,说当参数search 以任何方式出现时,将一个充满测试字符串的数组分配给结果,否则分配一个空数组。
      猜你喜欢
      • 2011-07-02
      • 2012-02-27
      • 1970-01-01
      • 1970-01-01
      • 2011-06-05
      • 1970-01-01
      • 2013-06-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多