首页 > 解决方案 > 在引导模式中显示视图不加载数据

问题描述

我试图从我的索引视图中从带有显示视图的 link_to 标记加载引导模式,但未加载实际数据。

控制器:

def index
    # to avoid NoMethodError on index.html.erb
    @model = Model.new
end

def show
    @model = Model.find(params[:id])
    logger.debug @model.id # Prints the correct id, so I know the data is loaded from ActiveRecord
end

index.htmnl.erb

<%= link_to show_path(m), remote: true, data: {toggle: "modal", target: "#editModal"} do %>
  Edit
<% end %>

<div class="modal fade" id="editModal" tabindex="-1" role="dialog" aria-labelledby="editModal" aria-hidden="true">
  <h5 class="modal-title" id="modalLabel"><%= @model.name %></h5>
....
</div

加载 index.html.erb 时,如果您查看源代码,#modalLabel 是空白的,这是有道理的。但是,当我单击以调出模式时,它保持空白。@model 没有从我的控制器的显示视图中刷新。

谢谢!

标签: ruby-on-railsruby-on-rails-6

解决方案


设置助手会导致它覆盖默认事件并remote: truelink_to单击时触发异步请求。该事件被路由到您的控制器,但作为 Javascript 请求。

HTML 请求的默认约定(即,除非您覆盖它)是让 Rails 找到相应的.html.erb视图来呈现(就像使用您的索引视图一样)。当您呈现索引时,它会呈现 HTML,但在那个阶段标签当然是空的。

Javascript 请求的工作方式类似,除了约定是查找相应的js.erb文件。在您的情况下,请求转到您的控制器的#show方法,该方法会加载您的模型并查找(以及其他可能性)model/show.js.erb。因为您没有,您可能会在日志中看到类似以下内容:

No template found for ArticlesController#show, rendering head :no_content
Completed 204 No Content in 7ms (ActiveRecord: 0.2ms | Allocations: 2893)

因此,您需要添加一些 Javascript 来更新您的页面show.js.erb。在您的情况下,例如:

document.getElementById('modalLabel').textContent = "<%= @model.name %>";

推荐阅读