Rails 3 将查询结果返回到表单页面的底部



我有一个简单的选择表单。当从表格中选择年份时,我希望结果返回到同一页面,但在表格下方。 有人可以解释如何做到这一点吗? 这是表单页面(索引.html.erb)

<%= form_tag("lookup/show", :method => "get") do %>
    <%= label_tag(:q, "Pub Year :") %>
    <%= collection_select(:lookup, :pubyear, @pubyears, :pubyear, :pubyear) %>
    <%= submit_tag("Find") %>
<% end %>

这是来自查找控制器的显示方法

def show
    @lookuprows = Lookup.return_lookup_row(params[:lookup][pubyear])
    respond_to do |format|
       format.html
    end
end

这是结果当前转到的show.html.erb页面

<tbody class="lkuptbody">
    <% @lookuprows.each do |lkup| %>
       <tr class="lkuprow">
         <td><input type="text" class="lkupcode" value=<%= lkup.codetype %> /></td>
         <td><input type="text" class="lkupdesc" value=<%= lkup.codedesc %> /></td>
         <td><input type="text" class="lkuprmks" value=<%= lkup.rermark %> /></td>
       </tr>
</tbody>

我知道我将不得不制作部分_show.html.erb,但是我如何从表单页面(index.html.erb)引用它?

谢谢

如果您希望结果显示在同一页面上但位于表单下方,则表单应将结果发送到index操作,而不是show操作:

<%= form_tag("lookup", :method => "get") do %>
  <%= label_tag(:q, "Pub Year :") %>
  <%= collection_select(:lookup, :pubyear, @pubyears, :pubyear, :pubyear) %>
  <%= submit_tag("Find") %>
<% end %>

并在您的查找控制器中:

def index
  @lookuprows = Lookup.return_lookup_row(params[:lookup][pubyear]) unless params[:lookup].nil?
  ...
end

然后,只需将表格 HTML 附加到显示在表单(在 index.html.erb 中)下方,并包装在if块中,以过滤掉@lookuprows为 nil 的情况:

<% if @lookuprows %>
  <tbody class="lkuptbody">
    <% @lookuprows.each do |lkup| %>
      <tr class="lkuprow">
        <td><input type="text" class="lkupcode" value=<%= lkup.codetype %> /></td>
        <td><input type="text" class="lkupdesc" value=<%= lkup.codedesc %> /></td>
        <td><input type="text" class="lkuprmks" value=<%= lkup.rermark %> /></td>
      </tr>
    <% end %>
  </tbody>
<% end %>

如果有的话,这将以表格形式显示@lookuprows的结果,如果没有,则不会显示表格。

您可能希望将该表 HTML 放在单独的部分以清理视图,但这对您提出的问题并不重要。

希望有帮助。

您想避免重新加载页面并将其放在表单下吗?以下是使用 ajax 的方法:

索引.html.erb.

<%= form_tag("lookup/show", :method => "get", :data => {:remote => true, :type => "html"}, :id => "lookup_form") do %>
  <%= collection_select(:lookup, :pubyear, @pubyears, :pubyear, :pubyear, id: 'lookup_show_select') %>
   <%# Add More fields here %>
  <%= submit_tag "Submit" %>
<% end %>
<div id='lookup_show_result'></div>

在应用程序/资产/查找.js.咖啡中。如果你不使用coffeescript,很容易翻译成JS,只需询问。

$ ->
  $(document).on 'ajax:success', '#lookup_form', (evt, data) ->
    $('#lookup_show_result').html(data)

控制器不变,仅根据所有参数处理请求

这是一个最小的未经测试的版本,告诉我你是否被卡住了

附带说明一下,我开始开发一个 gem,它将在这里使用 jQuery 扩展 Rails 的 UJS 实现,以使 ajax 的标准更新/删除等更容易:jQuery UJS 扩展

最新更新