1
我有一個activeadmin表單,允許添加一個youtube URL。我在我的視頻模型中驗證了此網址。當我想添加一個新視頻,但在編輯視頻時什麼也不做,它確實很好。
應用程序/管理/ video.rb:Ruby on Rails - Activeadmin - 具有虛擬屬性的更新模型
ActiveAdmin.register Media, as: 'Videos' do
form do |f|
f.inputs "Add youtube video" do
f.input :category
f.semantic_errors :error
f.has_many :videos, allow_destroy: true do |g|
g.input :mylink, :label => "Youtube link : ", :type => :text
end
actions
end
end
end
模型/ video.rb:
class Video < ApplicationRecord
belongs_to :media
attr_accessor :mylink
YT_LINK_FORMAT = /\A.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*\z/i
before_create :before_add_to_galerie
before_update :before_add_to_galerie
def before_add_to_galerie
uid = @mylink.match(YT_LINK_FORMAT)
self.uid = uid[2] if uid && uid[2]
if self.uid.to_s.length != 11
self.errors.add(:mylink, 'is invalid.')
throw :abort
false
elsif Video.where(uid: self.uid).any?
self.errors.add(:mylink, 'is not unique.')
throw :abort
false
end
end
validates :mylink, presence: true, format: YT_LINK_FORMAT
end
它看起來像before_update方法不會被觸發。
如何使我的編輯工作?
編輯:我想,它是調用媒體模型before_update鏈接,而不是視頻one.But創建是好的。
爲什麼你認爲它不觸發?您是否嘗試更新現有記錄? – Bohdan
我只是試圖調用before_update中的另一種方法,只打印一些文本到控制檯,它不打印任何東西 – KingOfBabu
它不工作,當我不使用虛擬屬性,但我真的需要這個來驗證鏈接 – KingOfBabu