1

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

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

4

2 回答 2

1

我在我的应用程序中处理这个问题的方法是使用一个回调,如果它是空白的before_save,它会删除ActionText::RichText数据库记录。body

这避免了污染控制器,并适用于创建和更新操作。即使没有相应的数据库记录,该body属性的action_text属性仍然可以访问,因为如果找不到记录,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
于 2020-11-13T22:29:37.983 回答
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
于 2020-10-29T02:11:06.830 回答