【问题标题】:Is it possible to prevent empty action text entries是否可以防止空的操作文本条目
【发布时间】:2021-02-11 06:23:11
【问题描述】:

我有一个非常简单的动作文本模型和表单

class Course < ApplicationRecord 
  validates :title, presence: true
  has_rich_text :content
end

<%= form_with model: @course do |f| %>
  <%= f.text_field :title %>
  <%= f.rich_text_area :content %>
<% end %>

一切都很好,但是由于content 字段是可选的,是否可以创建course 模型而不创建空/空白的action_text_rich_texts 条目?即使用户只输入title 而没有任何content,它目前正在创建它们,并且数据库中有很多不必要和空的action_text_rich_texts

【问题讨论】:

    标签: ruby-on-rails activerecord ruby-on-rails-6 actiontext


    【解决方案1】:

    我不确定 Actiontext 中是否为此内置了任何内容,但我想您可以在控制器级别处理此问题。

    我要尝试的第一件事是查看是否没有对 content 设置任何内容会阻止 Rails 创建关联记录:

    class CourseController
      def create
        # remove course_params[:content] if it's blank
        course_values = course_params[:content].blank? ? course_params.except(:content) : course_params
    
        Course.create(course_values)
        ...
      end
    end
    

    【讨论】:

    • 在创建没有内容的课程时有效,但是如果课程已经有内容并且在更新时被删除,它不会删除内容
    【解决方案2】:

    我在应用程序中处理此问题的方式是使用 before_save 回调,如果 body 为空,则删除 ActionText::RichText 数据库记录。

    这避免了污染控制器并且适用于创建和更新操作。即使没有相应的数据库记录,action_text 属性的 body 属性仍然可以访问,因为如果找不到记录,ActionText 将实例化一个新对象(这允许您在任一情况下测试 blank?)。

    试试这个:

    class Course < ApplicationRecord 
      validates :title, presence: true
      has_rich_text :content
      before_save :clean_up_content
    
      private
    
      def clean_up_content
        self.content.destroy if self.content.body.blank?
      end
    end
    

    【讨论】:

      猜你喜欢
      • 2011-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-31
      • 1970-01-01
      • 1970-01-01
      • 2018-09-30
      • 1970-01-01
      相关资源
      最近更新 更多