Image has_many :categories
。
它也是ccepts_nested_attributes_for :categories
。
Categories
只有id
和description
。我想要验证类别before_create
,而不是创建具有相同描述的重复类别,以便如果用户输入的category
已经存在,则只需将category
设置为{已存在的{1}}。
我尝试向category
和Image class
添加挂钩,但似乎都没有改变Category class
以便通过验证。
以下是我尝试过的内容(在Category
和Image class
上添加此内容):
Category class
答案 0 :(得分:0)
可能不是最好的解决方案,但它应该让你开始。
# Get the value of the category_description from the form
@category_description = params[:image][:category_attributes][:description]
# check if it already exists
if Category.exists?(description: @category_description)
# if it exists then find the category and pass it to the image
@existing_category = Category.where(description: @category_description).first
@image = Image.new(image_params.merge({ category: @existing_category }))
else
# if not, create a new image and category
@image = Image.new(image_params)
end
有几种方法可以找到现有的类别,但这应该可以帮到你!
答案 1 :(得分:0)
可以在关联上使用钩子,la:
has_many :categories, after_add: :chk_category
每次将类别添加到Image时都会调用chk_category方法,因此,您可以执行以下操作:
def chk_user(category)
exist_category = Category.where(title: category.title).first
if exist_category
self.categories = self.categories + [exist_category]
self.categories = self.categories - [category]
end
end
你会想在这里写一些测试,以确保你避免递归等,但我认为钩子应该有所帮助。