ROR 将参数传递给模态

ROR pass params to 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' %>

list_modal是模态结构的偏音

您可以直接将其传递给模态。这是我所做的,在我看来,我有一个按钮可以触发我的模式,然后我创建了一个部分(以干燥我的代码)_modal.html.erb并在我的按钮之后调用了那个部分。

<button type="button" class="btn btn-default" data-toggle="modal" data-target="#modal"></button

<%= render 'modal' %>

确保你的模式有 id <div class="modal fade" id="modal" tabindex="-1" role="dialog">...

伙计!

您可以像通常对视图组件那样进行设置。更好的是,将您的模型分成部分,比如 _modal.html.erb。然后你可以通过

调用模态
<%= render 'partial_name', :variable_name => your_current_variable %>

该变量现在可以作为 variable_name 在局部变量中使用。此外,如果它是像 @your_current_variable 这样的实例变量,那么它将在您的部分中自动可用。

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

示例:

Link 打开模式:

<%= link_to "Open users list", users_open_list_modal_path, remote: true %>

用户打开列表模式控制器操作:

def open_list_modal
  @user_list = User.all
  respond_to do |format|
    format.js
  end
end

open_list_modal.js.erb:

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

//render modal
$('#modal').openModal();

然后在模式本身上,您现在可以访问 user_list(不是 @user_list)列表。

Note: In this example, I made use of both erb, js, and material-modal. If you are using something different from these ( maybe slim, haml, coffee, bootstrap...), you will have to suite the example to your case.

希望对您有所帮助。