更新循环对象变量中的div

时间:2010-02-19 12:41:39

标签: ruby-on-rails

我在我的应用程序的视图一侧有一个页面,其中有一个对象循环@users现在我想只更新div的一部分而且div在循环内部我已经使div dinamic但我想要在同一页面中更新该div。我已经使用部分页面来通过控制器更新页面,但由于div处于循环中,因此不是wrking。 我的代码是 观点:

<% for user in @users %>
    <% if !user.country.blank?%> <%= user.country.to_s.capitalize  %><%end%>
    <div id="div_state_<%=user.id%>">
             <%= user.state  %>
              <%if user.state == 'active'%>
              <%= link_to_remote image_tag("/images/de-active.png",:title =>" make it pending"), :url => admin_manage_user_state_change_path(user.id),:update => 'div_state_#{user.id}'  %>
              <%else%>
              <%= link_to_remote image_tag("/images/active.png",:title =>" make it active"), :url => admin_manage_user_state_change_path(user.id),:update => 'div_state_#{user.id}'  %>
            <%end%>
    </div>

控制器方:

@user = User.find(params[:manage_user_id])
if @user.state=="active"
  @user.state = "pending"
 end
@user.save
render :update do |page|
  page.visual_effect :highlight, "div_state_#{@user.id}", :duration=>3
end

1 个答案:

答案 0 :(得分:1)

您正在调用更新,但实际上并没有更新任何内容。

我会把它拉成一个部分: _user_state.html.erb

<%= user.state  %>
<%if user.state == 'active'%>
  <%= link_to_remote image_tag("/images/de-active.png",:title =>" make it pending"), :url => admin_manage_user_state_change_path(user.id),:update => 'div_state_#{user.id}'  %>
<%else%>
  <%= link_to_remote image_tag("/images/active.png",:title =>" make it active"), :url => admin_manage_user_state_change_path(user.id),:update => 'div_state_#{user.id}'  %>
<%end%>

然后让你的控制器和你的循环呈现部分。诀窍是在渲染调用中使用:localsrender :partial => 'user_state', :locals => { :user => user }

所以要把它们放在一起:

Controller(因为你在link_to_remote中有更新调用,它将从控制器返回并替换传递的id的内部html):

user = User.find(params[:manage_user_id])
if user.state=="active"
  user.state = "pending"
end
user.save
render :partial => 'user_state', :locals => { :user => user }

查看:

<% for user in @users %>
  <% if !user.country.blank?%> <%= user.country.to_s.capitalize  %><%end%>
  <div id="div_state_<%=user.id%>">
  <%= render :partial => 'user_state', :locals => { :user => user } %>
  </div>
<% end %>

唯一缺失的部分是亮点。查看link_to_remote文档以获取更多信息。具体来说是:success

希望这有帮助。