ROR将params传递给模态

sot*_*otn 9 parameters ruby-on-rails bootstrap-modal

我正在尝试打开一个显示项目列表的模态.项目列表在视图中已作为变量提供.如何将此变量传递给模态?

下面是主视图的大致情况:

View.html.erb

<div>
  <%= @users.each do |user|%>
    <h1>user.name</h1>
    <h2>user.email</h2>
    <%= link_to remote: true, 'data-toggle' => 'modal', 'data-target' => '#taskModal do %>           
      <i><%= user.tasks.count%></i>
    <% end %>
  <% end %>
</div>

<div class="modal" id="taskModal" aria-hidden="true">
...
<%= render partial: 'list_modal' %>
Run Code Online (Sandbox Code Playgroud)

list_modal 是部分与模态的结构.

x6i*_*iae 10

与在视图中已经存在项目列表,并希望将其传递给模态相反,您可以做的一件事是使用按钮(或链接)打开模态以通过ajax调用控制器操作,然后让该动作响应JS,您现在将使用相应的view.js文件来填充模式以及以编程方式呈现它(在填充之后).

例:

链接到开放模式:

<%= link_to "Open users list", users_open_list_modal_path, remote: true %>
Run Code Online (Sandbox Code Playgroud)

用户打开列表模态控制器动作:

def open_list_modal
  @user_list = User.all
  respond_to do |format|
    format.js
  end
end
Run Code Online (Sandbox Code Playgroud)

open_list_modal.js.erb:

#populate modal
$('#modal').html('#{ escape_javascript(<%= render partial: 'user_list', locals: {user_list: @user_list} )}');

#render modal
$('#modal').openModal();
Run Code Online (Sandbox Code Playgroud)

然后在模态本身上,您现在可以访问user_list(NOT @user_list)列表.

注意:在这个例子中,我利用两个erb,jsmaterial-modal.如果你正在使用这些不同的(也许slim,haml,coffee,bootstrap...),你将不得不例子适合于你的情况.

希望这可以帮助.

  • 我考虑过这种方法,但是这种方法不是控制器操作对视图中已经存在的数据进行冗余调用数据库吗?我已经更新了我的 OP 以显示视图的大致样子。有没有一种方法,我不需要一个新的动作,而是可以将用户变量传递给模态。 (2认同)