我有一個rails系統,其中存在由用戶輸入的數據,並且在某些情況下,他們在創建具有相似名稱的記錄時出錯。在模型級別更正記錄中的拼寫錯誤的軌道
我實際上不允許內容重複(相同的名稱和分配)也許這就是爲什麼它不工作。
我有2種型號:
:question
belongs_to :content
:content
has_many :questions
belongs_to assignature
我需要做的是合併2條記錄,如果在更新名稱後場找到現有的記錄。
即。
內涵的 名=「這是一個測試」
內容B 名=「這是測試」
我想內涵的重新命名爲NAME =「這是測試」,合併記錄.questions,並摧毀內容A.
更新
由於@Thomas R.科爾讓我感動的邏輯控制器,事情現在的工作,但我不得不做一個奇怪的解決方法來繞過我的唯一性限制。
contents_controller
def_update
existent = Content.where(nombre: params[:content][:nombre]).where(assignature_id: params[:content][:assignature_id])
if existent.present?
@content.questions.update_all(content_id: existent.first.id)
#if params nombre is equals to existent , model wont update
params[:content][:nombre] = "dummy"
end
...
content.rb
after_update :clean_empty_contents
def clean_empty_contents
#delete if content has no questions (applies to my system)
Content.includes(:questions).where(questions: {id: nil}).destroy_all
end
我與此代碼嘗試沒有成功:
content.rb
validates :nombre, uniqueness: { scope: [:assignature_id], :case_sensitive => false}
before_update :correction
def correction
existent = Content.find_by(nombre: self.nombre, assignature: self.assignature).first
if existent
existent.questions = existent.questions + self.questions
self.destroy
end
end
感謝您的快速回答,我有點失落如何實現這一點,我應該使用before_update嗎?並且我應該從控制器傳遞ID嗎?問候 – llermaly
從控制器傳遞對象。 –
我得到「無法修改冷凍哈希錯誤」,一些stackoverflow答案說這是因爲我試圖使用一個被破壞的元素。我刪除了破壞行和工作,問題被重新分配,但屏幕沒有重定向,元素沒有被更新,即使我聲明self.name =「dummy」,也會玩這個 – llermaly