首页 > 解决方案 > 在 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 和视图方面进行哪些更改。

标签: ruby-on-railsajax

解决方案


看起来您尝试填写表单数据并将其保存在一个操作中。如果我是正确的理解你的问题,你有Review很多Review评论标签。并且您尝试在使用Review模型的页面上添加此标签,并且您希望在一个页面上编辑Review数据和ReviewTag数据而无需重新加载。您需要使用nested_attributes和创建如何ReviewTag从 javascript 编辑的表单。推荐查看本指南https://www.pluralsight.com/guides/ruby-on-rails-nested-attributes

它是这样工作的:

  1. Review模型上添加accepts_nested_attributes_for :review_tags
  2. 在您编辑Review模型的页面上添加了块,例如form.fields_for :review_tags do |builder|
  3. 在同一页面上添加了一个按钮,create tag并添加了 jsonclick操作 - 此操作为 new 创建一个表单ReviewTag。阅读此内容 -如何通过 Javascript 动态创建表单

如果你需要动态验证你的新标签,你可以调用 ajax 来做


推荐阅读