传递数据给Rails局部视图

3

编辑:解决方案完美地起作用了。dom_id

我正在尝试传递数据到一个部分,并使用它来更改用户的角色。现在它只会更改一个用户的角色。当它被渲染时,它只显示并处理User.first的角色。

它被渲染的位置。我在本地传递了用户。根据this post中的第二个答案,我使用了第一个答案不起作用,并给我带来了错误。

<%= render :partial => 'roles', :locals =>  { :user => user } %>

以下是部分的_role.html.erb文件。
<div id="roleModal" class="reveal-modal">
   <%= semantic_form_for user, :url => user_path(user), :html => {:method => :put } do |f| %>
      <h3>Change Role</h3>
      <div class="reveal-modal-body">
         <%= f.input :roles, :as => :check_boxes, :input_html => { :selected => user.role_ids } %>
      </div>
      <a class="close-reveal-modal">&#215;</a> 
      <%= f.action :submit, :as => :button %>
   <% end %>

<% @users.each do |user| %>
<tr>
  <td><%= link_to user.name, user %></td>
  <td><%= user.email %></td>
  <td><%= user.created_at.to_date %></td>
  <td><%= user.roles.first.name.titleize unless user.roles.first.nil? %></td>
  <td>

     <a href="roles#<%= user.id %>" data-reveal-id="roleModal" class="button" type="button">Change role</a>
    <%= render :partial => 'roles', :locals =>  { :user => user } %>

  </td>
</tr>
<% end %>

虽然我觉得这应该可以运行,但实际上并不行。它只会为第一个用户显示和更改角色,无论登录的是谁,只要他们是管理员。我正在尝试找出原因。 - doubleA
如果你将 User.first 传递给 partial,它将在每次渲染时渲染数据库中第一个用户的数据。请在循环中调用渲染 partial 的行,以便为要显示表单的每个用户调用它。 - xkickflip
我已经发布了部分渲染的位置。它在我的用户循环中。这是在我的用户控制器的 index.html.erb 中。我的用户控制器索引操作提供了 @users = User.all - doubleA
哦,好的,如果没有最后一次编辑,这不是很明显。在我看来,你的代码是正确的。你可以尝试将部分代码粘贴到视图中的循环中,看看是否可以正常工作,以确保一下? - xkickflip
1
是的,最近我尝试了一下,并得到了相同的结果。为了更好地进行检查,我删除了部分中的所有非erb内容。我把所有的div都去掉了,什么都没有留下。现在它直接在表格中呈现,并且正常工作。这似乎与Foundation 4的reveal模态框以及它如何通过data-reveal-id被调用有关。我的解决方案不算完美。 - doubleA
1
你的 data-reveal-id 不是唯一的。 "更改角色" 链接总是会显示页面中该 ID 的第一个出现,因此它总是会显示第一个用户的表单。 你需要做一些类似于将 user.id 追加到 <div> id 和 <a> 中,以便它们匹配起来。 - xkickflip
1个回答

4
你有一个问题需要正确地将局部变量传递给模板。问题在于使用非唯一的ID对来显示隐藏表单。因此,显示链接总是会显示具有该ID的div的第一个出现,从而始终更改第一个用户的角色。
尝试更新这两行代码,使用Rails dom_id()助手创建数据匹配的唯一匹配对data-reveal-idid,如Foundation显示模态文档所述:
<a href="roles#<%= user.id %>" data-reveal-id="<%= dom_id(user) %>" 
class="button" type="button">Change role</a>

<div id="<%= dom_id(user) %>" class="reveal-modal">

感谢您,先生。我已经试图解决这个问题两天了。而您帮助我理解了Rails中一个很好的辅助工具,我将在明天进行研究。现在已经是凌晨3点了,我必须睡觉了。再次感谢您。 - doubleA
很高兴能够帮助,还有一个dom_class()助手也值得一看。 - xkickflip
嗯,我正在研究它们,以备将来参考。这些知识很有用。我不确定我是否会找到它们,因为我不知道我在搜索什么。 - doubleA

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接