在Rails 4中,如何调整以下控制器,视图和部分视图,以便当我单击"Update Time"
提交按钮时,ID为'search_results'
的html div将使用由_results.html.erb
偏?
我有一段时间没有使用过Rails,我似乎记得在Rails 1中做起来非常简单。我发现Rails 4的文档似乎涉及到我不熟悉的JQuery,并且不明白如何将它绑定到这种形式。
我已阅读过这篇文章:http://edgeguides.rubyonrails.org/working_with_javascript_in_rails.html
但仍然不完全了解发生了什么。
RuleSearchController.rb
class RuleSearchController < ApplicationController
def index
end
def results
end
end
index.html.erb
<%= form_tag('/rule_search_results', :id => 'search_form') do %>
<%= submit_tag "Update Time" %>
<% end %>
<div id='search_results'>
<%= render partial: "results" %>
</div>
_results.html.erb
<%= Time.new %>
更新
目前的答案是做一些奇怪的事情。当我在_results.html.erb
中有一些简单的内容时,它可以工作:
<%= Time.new %>
但是,如果我做的事情很简单:
<%= Time.new %>
<hr />
虽然控制台上没有错误,但没有任何反应,搜索结果div也没有更新。
进一步更新 我可以迭代一组AR对象,并在search_results div中打印它们的名称,前提是我在下面这样做,并且它是文件中唯一的一行:
<% for rule in rules do %><%= rule.name %><% end %>
但是下面不起作用
<% for rule in rules do %>
<%= rule.name %>
<% end %>
答案 0 :(得分:2)
这应该有效:
<强> index.html.erb
var set =
(from m in managers
from t in context.tblCompany
join tsc in context.tblStyling on t.ccID equals tsc.ccID
select new { tsc.ccID,LogoIcon = tsc.Icon , tsc.style1, tsc.style2, t.Desc })
.ToList();
return set.Select(c => new Settings(c.ccID, c.style1, c.style2, c.Desc, c.LogoIcon , m.firstName , m.lastName));
然后在与_results.html.erb文件相同的目录中创建一个名为“ results.js.erb ”的文件:
<%= form_tag('/rule_search_results', :id => 'search_form', remote: true) do %>
<%= submit_tag "Update Time" %>
<% end %>
它的作用是remote:true告诉控制器而不是javascript请求,因此控制器知道查找带有方法名称后跟.js.erb的文件并自动运行JS代码。
更新:为了解决多行HTML的问题,您可以在渲染之前添加“j”,这将转义输出:
$('#search_results').html('<%= render partial: "results" %>');