Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RubyonRails中表单提交后刷新DIV_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails RubyonRails中表单提交后刷新DIV

Ruby on rails RubyonRails中表单提交后刷新DIV,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个控制器和一个视图(这个没有ActiveRecord)。控制器计算世界上几个地方的当前时间,视图显示这些时间 我想添加一个按钮,使时钟更新。添加一个刷新整个页面的常规按钮可以很好地工作,但我希望使用AJAX异步完成这项工作。 我试着使用表单远程标记,但是什么都没有发生,因为没有刷新任何内容 我该怎么做 (顺便说一句,我这样做是为了学习rails。没有真正的需要或要求) 我的代码: 控制器有趣的部分: def index utc_time = Time.now.getutc @clo

我有一个控制器和一个视图(这个没有ActiveRecord)。控制器计算世界上几个地方的当前时间,视图显示这些时间

我想添加一个按钮,使时钟更新。添加一个刷新整个页面的常规按钮可以很好地工作,但我希望使用AJAX异步完成这项工作。 我试着使用
表单远程标记
,但是什么都没有发生,因为没有刷新任何内容

我该怎么做

(顺便说一句,我这样做是为了学习rails。没有真正的需要或要求)

我的代码: 控制器有趣的部分:

def index
  utc_time = Time.now.getutc
  @clocks = []
  @clocks << ["USA - New York", utc_time - 60*60*5]
  @clocks << ["England - London", utc_time]
end
<%= javascript_include_tag 'prototype' %>

<div id="clocks_div">
<% @clocks.each do |city, time| %>
  <b><%=h city %></b>: <%=h get_formatted_time(time) %>
<br/>
<% end %>
</div>
<br/>

<% form_remote_tag do %>
    <%= submit_tag "Refresh!" %>
<% end %>
def索引
utc_time=time.now.getutc
@时钟=[]

@时钟我认为您必须将要更新的div的名称和要使用的操作/控制器传递到form\u remote\u view。 试着这样做:

<% unless params.has_key? "refresh" %>
 <% form_remote_tag :update => "clocks_div", :url => { :action => :index } do %>
  <%= hidden_field_tag 'refresh' %>
  <%= submit_tag "Refresh!" %>
 <% end %>
<% end %>

“clocks_div”,:url=>{:action=>:index}do%>

注意:虽然这应该可以工作,但将clocks\u div的模板移动到a中并通过单独的操作进行渲染可能会很方便我认为您必须将要更新的div的名称和要使用的操作/控制器传递到form\u remote\u view。 试着这样做:

<% unless params.has_key? "refresh" %>
 <% form_remote_tag :update => "clocks_div", :url => { :action => :index } do %>
  <%= hidden_field_tag 'refresh' %>
  <%= submit_tag "Refresh!" %>
 <% end %>
<% end %>

“clocks_div”,:url=>{:action=>:index}do%>

注意:尽管这应该可以工作,但将clocks\u div的模板移动到a中并通过单独的操作进行渲染可能会很方便

将clocks\u div的内容移动到它自己的部分(而不是div本身)。然后在索引页面中,您可以使用链接到远程、按钮到远程,甚至定期调用远程来更新div

因此:

“clocks\u div”,:url=>{:action=>:refresh}%>

{:action=>:refresh},:update=>“clocks\u div”%>
然后在控制器中执行如下操作:(我在这里添加了一些重构)

def get_时钟
utc_time=time.now.getutc
时钟=[]
时钟错误,:locals=>{:clocks=>get_clocks}
#使用时钟值仅渲染部分时钟
结束

将时钟div的内容移动到它自己的部分(而不是div本身)。然后在索引页面中,您可以使用链接到远程、按钮到远程,甚至定期调用远程来更新div

因此:

“clocks\u div”,:url=>{:action=>:refresh}%>

{:action=>:refresh},:update=>“clocks\u div”%>
然后在控制器中执行如下操作:(我在这里添加了一些重构)

def get_时钟
utc_time=time.now.getutc
时钟=[]
时钟错误,:locals=>{:clocks=>get_clocks}
#使用时钟值仅渲染部分时钟
结束

如果您不希望视图端更新,您可以通过渲染更新从操作端执行更新

例如

渲染:更新do |页面|
页面[:clocks\u div].innerHTML=render:partial=>“控件/标记列表”

结束

如果您不希望视图端更新,您可以通过渲染更新从操作端执行此操作

例如

渲染:更新do |页面|
页面[:clocks\u div].innerHTML=render:partial=>“控件/标记列表”
结束

<%= button_to_remote "Refresh", :url => { :action => :refresh }, :update => "clocks_div" %>
def get_clocks
  utc_time = Time.now.getutc
  clocks = []
  clocks << ["USA - New York", utc_time - 60*60*5]
  clocks << ["England - London", utc_time]
  clocks
end
private :get_clocks

def index
  @clocks = get_clocks
  # Renders the full index page by default
end

def refresh
  render :partial => "clocks", :layout => false, :locals => { :clocks => get_clocks }
  # Renders only the clocks partial with the clock values
end