在 Rails 4 中,一个表单传递了错误的图像 url,并从部分形式更正为另一个表单



>我正在使用一个部分,它以属于两个不同控制器的两种形式呈现,如下所示:

update_user.html.erb

<%= form_with model: @user,
url: {
controller: :profile,
action: :update_user
},
method: :post,
local: true do |f| %>
<%= render partial: 'shared/user_registration_fields', locals: { f: f, profile: @profile } %>
<%= f.submit 'Confirm' %>
<% end %>

new_user.html.erb

<%= form_for @user,
url: {
action: :register_user
},
method: :post,
local: true do |f| %>
<%= render partial: 'shared/user_registration_fields', locals: { f: f, profile: @profile } %>
<%= f.submit 'Confirm' %>
<% end %>

部分字段如下:

部分.html.erb

<%= f.fields_for :profile, profile do |prform| %>
<%= prform.label :date_of_birth, 'DOB' %><br />
<%= prform.text_field :date_of_birth, { class: 'datepicker', title: "Date_of_birth", value: (f.object.date_of_birth.strftime("%d-%m-%Y") if f.object.date_of_birth.present?) } %>

图像使用 jquery 渲染,如下所示:

$( ".datepicker" ).datepicker({
showOn: "button",
buttonImage: "assets/form_images/calendar.png",
buttonImageOnly: true,
buttonText: "Select date of birth",
dateFormat: 'dd-mm-yy',
});

第一种形式位于以下路径中 -> app/views/profile/update_user.html.erb 第二种形式位于以下路径中 -> app/views/login/new_user.html.erb 部分位于以下路径中 -> app/views/shared/_partial.html.erb

现在,图像assets/form_images/calendar.png显示在此文件中new_user.html.erb但不在此update_user.html.erb中。当我从浏览器检查图像 url 时,new_user.html.erbassets/form_images/calendar.png哪个是正确的,但对于update_user.html.erb来说,它是profile/assets/form_images/calendar.png哪个是错误的。为什么会这样显示?我在这里做错了什么?

这是因为,您正在使用配置文件嵌套属性,并且 rails 正在附加配置文件路径。通过附加 .erb 重命名您的 JS 文件,例如文件名.js.erb并替换按钮图像代码,如下所示并尝试。

buttonImage: "<%= asset_path('form_images/calendar.png') %>";

最新更新