如何在单击链接后将局部变量发送到部分渲染?

时间:2015-03-13 07:10:04

标签: javascript ruby-on-rails twitter-bootstrap ruby-on-rails-4 simple-form

单击此链接时会触发Bootstrap模式:

<a class="plus" href="javascript:;" data-toggle="modal" data-target="#myModal">&nbsp;</a>

然后我在我的_footer.html.erb

中有这个
<%= render 'shared/tag_users_modal' %>

然后有这个标准的Bootstrap Modal:

<!-- Modal -->
<div class="modal tagging 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-label="Close"><span aria-hidden="true">&times;</span></button>
        <h4 class="modal-title" id="myModalLabel">Tag User</h4>
      </div>
      <div class="modal-body">
                <%= simple_form_for @node, url: add_tagged_user_node_path(@node), method: :post do |f| %>
                  <%= f.error_notification %>

                  <div class="form-inputs">
                        <%= f.input_field :user, label: "Users", collection: @users, as: :check_boxes, checked: @node.user_tags %>
                  </div>                            

                  <div class="form-actions">
                    <%= f.button :submit %>
                  </div>
                <% end %>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Save changes</button>
      </div>
    </div>
  </div>
</div>

这不起作用,因为@node是零 - 即它没有通过。我无法从我的_footer部分传递该变量,因此我希望能够在模态的原始执行中传递它。

我该怎么做?或者我该如何以另一种方式做到这一点?

修改1

要添加更多上下文,调用Bootstrap Modal的初始链接实际上是另一个局部变量node传递给它的部分。那个叫做这样:
    &lt;%= render partial:&#34; shared / box&#34;,locals:{node:node}%&gt;

但是,只有在第一个shared/box点击了切换链接后,我才需要继续执行被解雇的模式。

总结:   - /shared/box partial具有触发BS模态的原始链接。   - /shared/footer' contains a render of another partial tag_users_modal . - / shared / tag_users_modal contains the modal, but I need the @ node object passed to it and the add_tagged_user_node_path`正常工作。

现在它没有通过,因为我无法找到将原始node: node转换为链中第三部分的方法。

1 个答案:

答案 0 :(得分:1)

因此,最好在局部变量中使用局部变量而不是实例变量。

# your main view file:
<%= render partial: path_to_partial, locals: {bool: true} %>

# your partial:
<%= bool ? 1 : 2 %>

使用这些选项,部分将显示1。

另外,将局部变量作为locals选项传递的替代方法是使用render代替render partial,如下所示:

# your main view file:
<%= render path_to_partial, bool: true %>

从上面可以推断,您必须将部分@node更改为node,并在呈现部分内容时指定{node: @node}