【问题标题】:Show form results without reload in Ruby on Rails在 Ruby on Rails 中显示表单结果而无需重新加载
【发布时间】:2021-04-10 22:40:56
【问题描述】:

我有一个带有表单的页面,我想在我的 rails 应用程序中查看不重新加载的结果,但我是新手,将 JS 合并到 ruby​​ on rails 中。我尝试遵循Display result data without page refresh on form submission in 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。这不是我困惑的原因,尽管我认为我可能需要将其删除以应用解决方案)

这个表单提交给我的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-rails ajax


    【解决方案1】:

    看起来您尝试填写表单数据并将其保存在一个操作中。如果我理解你的问题,你有Review 和Review 有很多评论标签。您尝试在使用Review 模型的页面上添加此标签,并且您希望在一个页面上编辑Review 数据和ReviewTag 数据而无需重新加载。您需要使用nested_attributes 并创建表单如何从javascript 编辑ReviewTag。推荐看这篇攻略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 的按钮并添加了js onclick 操作-此操作为新的ReviewTag 创建了一个表单。阅读这个 - How to Create a Form Dynamically Via Javascript

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

    【讨论】:

    • 我实际上只是在现有的Review 中添加了一个ReviewTag,但这已经足够接近我需要的东西了,尤其是当我认为我还有其他地方时现在使用nested_attributes,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-05
    • 2011-04-28
    相关资源
    最近更新 更多