Rails 4 form_tag更新元素,部分为

时间:2015-05-22 11:42:20

标签: ruby-on-rails-4

在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 %>

1 个答案:

答案 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" %>');