ruby-on-rails - 简单表单使远程抛出错误
问题描述
当我尝试将其设置为远程时,我的 simple_form 无法正常工作。我不想刷新整个页面,只刷新有表单的区域。目前,我有这个:
<div class="col-2">
<%= simple_form_for ([current_user, @character]), defaults: {label: false} do |m| %>
<%= m.simple_fields_for :dnd5e_sheet do |p| %>
<%= p.input :acrobatics, as: :boolean, input_html: { onchange: 'this.form.submit();' } %>
<% end %>
<% end %>
</div>
哪个有效,但整个页面刷新,所以我添加了一条新路线:
resources :user, only: [:show] do
resources :characters do
put "minus-hp", to: "characters#minus_hp"
put "add-hp", to: "characters#add_hp"
patch "skill-update", to: "characters#skill_update"
end
resources :campaigns
end
在控制器中我做了一个新动作:
def skill_update
@character = Character.includes(:dnd5e_sheet)
.find(params[:character_id])
@character.update(character_params)
respond_to do |format|
format.js { render partial: 'characters/DnD5e/skills' }
end
end
Skill.js.erb 只有一个简单的渲染:
$("#stats").html("<%= escape_javascript(render partial: 'characters/DnD5e/skills_card') %>");
我已经尝试了所有我能想到的 URL 路径组合,但无法让它们中的任何一个起作用。
编辑:我也试过这个:
<%= simple_form_for @character, url: user_character_skill_update_path(current_user, @character), method: :put, remote: true, :authenticity_token => true, defaults: {label: false} do |m| %>
<%= m.simple_fields_for :dnd5e_sheet do |p| %>
<%= p.input :acrobatics, as: :boolean, input_html: { onchange: 'this.form.submit();' } %>
<% end %>
<% end %>
但它将它作为 HTML 请求而不是 javascript 发送,因此在 response_to 中出现错误
解决方案
所以从这个问题中发现Rails Trying to submit a form onchange of dropdown
错误的不是表单或远程 true,而是 onchange 事件,因此将其更改为:
<%= m.input :acrobatics, input_html: { onchange: 'Rails.fire(this.form, "submit")' } %>
对于远程表单,一切都按预期工作
推荐阅读
- java - 无法在 Maven 依赖管理导入范围内提供版本范围
- android - 如何将链接与值连接?
- angular - 如果使用 Spring + SockJS + STOMP,websocket 消息会被缓存吗?如果没有,如何检测网络断开?
- sycl - 用于 Windows 的 HipSYCL
- node.js - 如何在 polka js 中保护路由
- valgrind - valgrind memcheck xtree 文件的工具
- html - 防止浏览器尝试从根目录加载网站图标
- ruby-on-rails - 如何为通过 Active Storage 上传的 S3 文件设置缓存控制?
- angularjs - AngularJS GET 请求自动无需重新加载或刷新页面来呈现数据
- activemq-artemis - 如何配置 ActiveMQ Artemis 服务器以进行远程访问?