3

我有一个简单的选择表格。从表格中选择一年时,我希望将结果返回到同一页面但在表格下方。有人可以解释如何做到这一点吗?这是表单页面(index.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 %>

这是 Lookup 控制器的 show 方法

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) 中引用它?

谢谢

4

2 回答 2

3

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

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

在你的 LookupController 中:

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

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

<% 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 放在单独的部分中以清理视图,但这对于您提出的问题并不是必需的。

希望有帮助。

于 2012-10-04T02:09:47.933 回答
1

您想避免重新加载页面并将其放在表单下吗?以下是使用 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>

在 app/assets/lookup.js.coffee 中。如果不使用coffeescript,翻译成JS很容易,问吧。

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

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

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

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

于 2012-10-04T02:14:50.097 回答