簡體   English   中英

Rails異常處理ActiveRecord :: AssociationTypeMismatch

[英]Rails handling ActiveRecord::AssociationTypeMismatch as exception

我有以下代碼:

def set_tags_from_string
    list = self.tags_string.split(/ /)

    list.each do |tag|
        begin
            self.partner_tags << PartnerTag.find_by(name: tag)
        rescue
            self.partner_tags << PartnerTag.create(name: tag)
        end
    end
end

當我嘗試將PartnerTag放入self.partner_tags且該標記尚不存在時,就會出現問題。 控制台顯示以下內容:

ActiveRecord::AssociationTypeMismatch: PartnerTag(#28272720) expected, got NilClass(#8501040)

我希望能夠將其作為異常處理,但它仍然會給出錯誤。 之前我從未在Ruby中進行過異常處理,所以我認為自己可能遺漏了一些東西,但是我遵循了教程,但看不到遺失的東西。 Rails API說,實際上這是一個異常,最終從StandardError繼承。 Ruby文檔說,救援子句應處理所有StandardError ,所以我不知道我在做什么錯。

嘗試以下方法:

self.partner_tags << PartnerTag.find_by(name: tag) || PartnerTag.create(name)

另外,如果您在Rails 4上,則可以執行以下操作:

self.partners_tags << PartnerTag.find_or_create_by(tag: name)

但是請注意,除非您在數據庫中具有唯一約束,否則它不會阻止您以兩個相同的標簽結尾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM