ruby-on-rails - 在 Ruby on Rails 中显示表单结果而无需重新加载
问题描述
我有一个带有表单的页面,我想在我的 rails 应用程序中查看不重新加载的结果,但我是新手将 JS 合并到 ruby on rails 中。我已经尝试在没有页面刷新的情况下在 ruby on rails 中的表单提交以及一些“AJAX 简介”指南中跟踪显示结果数据,但我正在努力将它们应用到我自己的项目中。
在我的用户个人资料profile.html.erb
中,我有一个标签列表供评论
<% if review.tags.length > 0 %>
<% review.tags.each do |tag| %>
<%= tag.category %>
<%= tag.name %>
<% end %>
<% end %>
在其下有一个添加新标签的表单
<%= simple_form_for @tag, url: "/add_tag/#{review.id}" do |form| %>
<%= form.input :category %>
<%= form.input :name %>
<%= form.button :submit %>
<% end %>
(出于格式化原因,我目前正在使用 gem simple_form。这不是我困惑的原因,尽管我认为我可能需要将其删除以应用解决方案)
这个表单提交给 my reviews_controller
,它有这个方法add_tag
def add_tag
@review = Review.find_by(id: params[:id])
tag_cat = params[:tag][:category]
tag_name = params[:tag][:name]
if valid_tag(tag_cat, tag_name) && tag_cat != ""
@tag = grab_tag(tag_cat, tag_name)
if ReviewTag.find_by(tag_id: @tag.id, review_id: @review.id).nil?
ReviewTag.create(tag_id: @tag.id, review_id: @review.id)
end
redirect_to '/profile'
else
redirect_to '/profile'
end
end
目前redirect_to /profile
工作正常,但似乎我需要以format.js
某种方式使用?我正在努力查看我需要在 javascript 和视图方面进行哪些更改。
解决方案
看起来您尝试填写表单数据并将其保存在一个操作中。如果我是正确的理解你的问题,你有Review
很多Review
评论标签。并且您尝试在使用Review
模型的页面上添加此标签,并且您希望在一个页面上编辑Review
数据和ReviewTag
数据而无需重新加载。您需要使用nested_attributes
和创建如何ReviewTag
从 javascript 编辑的表单。推荐查看本指南https://www.pluralsight.com/guides/ruby-on-rails-nested-attributes
它是这样工作的:
- 在
Review
模型上添加accepts_nested_attributes_for :review_tags
- 在您编辑
Review
模型的页面上添加了块,例如form.fields_for :review_tags do |builder|
- 在同一页面上添加了一个按钮,
create tag
并添加了 jsonclick
操作 - 此操作为 new 创建一个表单ReviewTag
。阅读此内容 -如何通过 Javascript 动态创建表单
如果你需要动态验证你的新标签,你可以调用 ajax 来做
推荐阅读
- visual-studio - 为 Microsoft.EntityFrameworkCore 检测到错误 NU1107 版本冲突。安装 EF 核心时安装/参考
- wordpress - 当帖子具有多个类别时,每个循环都会导致重复的帖子显示
- awk - 如果在块中找到字符串,Shell 脚本将删除整个块本身
- python - Python UDP 与本地链接地址通信(以太网端口到以太网端口)
- html - SVG SMIL 动画在 Firefox 和 Edge 中不起作用
- c# - 如何使一段数据可用于调用堆栈中的其他函数?
- java - startForeground 的错误通知(呼叫记录器 API 29)
- sql - 创建超过 1 个程序
- java - 在注释处理器中获取没有任何注释的字段类型
- javascript - 如何在 Typescript 中将具有动态键的对象设置为 React 状态