问题描述
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
行
解决方法
我不确定在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
,
我在应用程序中处理此问题的方式是使用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