我在我的应用程序的视图一侧有一个页面,其中有一个对象循环@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
答案 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%>
然后让你的控制器和你的循环呈现部分。诀窍是在渲染调用中使用:locals
。 render :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
。
希望这有帮助。