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