Rails Turbo Frame渲染新建表单报错:缺失partial cust/customer_dates/_new
问题分析
你犯了一个常见的Rails视图渲染错误:render new_cust_customer_date_path的写法是错误的。render方法如果接收字符串参数,会默认将其当作局部视图文件的路径(要求文件以_开头),而不是路由路径。系统因此尝试寻找cust/customer_dates/_new这个局部视图,但你只有new.html.erb和_form.html.erb,所以触发了缺失局部的报错。
解决方案
有两种可行的修正方式,根据你的需求选择:
方式一:直接渲染表单局部视图
既然new.html.erb本身也是渲染_form.html.erb的,你可以直接在Turbo Frame里调用这个表单局部:
- 先在
Cust::CustomerBookingsController的index方法中初始化新对象:
def index @customer_date = Cust::CustomerDate.new end
- 修改
/views/cust/customer_bookings/_main.html.erb:
<%= turbo_frame_tag @customer_date do %> <%= render "cust/customer_dates/form", customer_date: @customer_date %> <% end %>
方式二:用Turbo Frame的src属性加载路由页面
如果你想复用new.html.erb的完整内容,可以让Turbo Frame通过路由请求并加载页面:
修改/views/cust/customer_bookings/_main.html.erb:
<%= turbo_frame_tag @customer_date, src: new_cust_customer_date_path %>
这种方式下,Turbo会自动向new_cust_customer_date_path发起请求,并将响应内容填充到当前Turbo Frame中。如果只需要表单部分,建议用方式一更直接。
内容的提问来源于stack exchange,提问作者perissf
相关产品推荐
相关产品推荐

