ruby-on-rails - 在引导模式中显示视图不加载数据
问题描述
我试图从我的索引视图中从带有显示视图的 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 没有从我的控制器的显示视图中刷新。
谢谢!
解决方案
设置助手会导致它覆盖默认事件并remote: true
在link_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 %>";
推荐阅读
- python - 无法从放置在 Google Drive 上并使用 google colab 的文件中解压缩和读取数据
- python - 由于 Apache Superset 中的 JSON 解码错误,无法加载仪表板列表
- mongodb - Mongoose 错误:传入的参数必须是 12 个字节的单个字符串或 24 个十六进制字符的字符串
- r - 在 Databricks 中使用 sparklyr 收集表
- python - Pip ValueError:源代码字符串不能包含空字节
- javascript - 如何保持多个状态页面刷新期间页面上的元素?
- javascript - 根据条件设置折线图标记颜色
- android - 由于某些设备显示不同的应用程序徽标,如何管理应用程序徽标
- angular - 将 FormArray 重置为初始状态
- c++ - 一致性影响并发算法?