Rails部分形式

时间:2014-02-04 23:46:17

标签: ruby-on-rails ruby-on-rails-4 partial-views

我有一个Bootstrap模式,通过Rails部分渲染,我需要这个模态与编辑 Rails视图共享。在这部分中,有一些用户的列表,我需要检查它们,当用户保存它时,用户的选择将参数发送到主视图(新建或编辑)。此外,当从编辑视图中弹出时,我需要此部分用于已选择的用户。 那么如何做到这一点?

以下是截图:enter image description here

我需要在每个用户的select列下面有一个复选框,如果正确调用它,也会将所选内容发送到“调用者视图”!

我新视图中的代码

<div class="form-group">
  <%= f.label :members %>
  <span class="glyphicon glyphicon-user"></span>
  <div class="row">
    <div class="col-sm-6">
    <% if user.empty? %>
      <p>Cannot assign memebers<p>
    <% else %>
      <!-- Button trigger modal -->
      <button class="btn btn-primary btn-sm" data-toggle="modal" data-target="#myModal">
        Select Members
      </button>
      <%= render 'layouts/select_user' %>
    <% end %>
    </div>
  </div>
</div>

以下是名为"layouts/_select_user.html.erb"

的部分视图
<!-- Bootstrap Modal -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
        <h4 class="modal-title" id="myModalLabel">Select Available Members</h4>
      </div>
      <div class="modal-body">

      <table class="table table-striped">
        <tr>
          <th>Select</th>
          <th>Username</th>
          <th>Job Title</th>
        </tr>

        <% User.where(:manager => false, :admin => false, :locked => false, :company_id => nil).each do |user| %>

        <tr>
          <td><%#= checkbox here  %></td>
          <td><%= link_to user.username.capitalize, edit_admin_user_path(user) %></td>
          <td><%= user.job_title %></td>
        </tr>

        <% end %>
      </table>

      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
        <button type="button" class="btn btn-primary">Save changes</button>
      </div>
    </div>
  </div>
</div>

2 个答案:

答案 0 :(得分:1)

如果我找到了你,你正在尝试更新多个用户对象(通过选中每个用户对象旁边的复选框)。

首先,从gui运行查询不是最佳方法,从控制器操作(new / edit)填充这些用户对象。然后,您可以通过:locals哈希:

将User对象的集合传递给partial
def new
  @users = User.where(:manager => false, :admin => false, :locked => false, :company_id => nil)
end

<%=render :partial => 'layouts/select_user', :locals => {:users => @users}

现在,在您的部分中,您可以使用@users变量,而不是直接调用查询。

复选框参考对我来说似乎很松散。就User对象而言,它意味着什么?此值是否会更改User对象的含义(例如,它是一个布尔值,告诉您用户是否属于某种类型:员工,雇主等)。如果是,请在users表中添加一个新字段。您可以将此新字段用于复选框。

现在,为了更新这些用户,请在表单中包含@users对象,并创建一个控制器操作来处理此更新。当您从模态提交表单时,它将向您发送一组表单对象。您可以从控制器操作迭代这些表单对象并相应地处理对象。

这是使用多个表单来更新多个对象的good example

同时查看Ryan Bates关于同一主题的“轨道广播”节目:
Complex Form 1
Complex Form 2
Complex Form 3

答案 1 :(得分:-1)

没有“来电者”,因为您的模态视图是内联HTML,因此您应该能够访问模式表单数据