2011-11-16 59 views
1

在我的查看頁面中,我使用form_tag創建一個表單,該表單將隱藏字段中的ID字符串傳遞給控制器​​代碼。使用form_tag更新數據庫中的記錄

在我的控制器代碼中,我通過一個ID數組循環來更新包含表達式表中的該ID的每條記錄。但下面的代碼似乎不起作用。 我真的很感激,如果有人可以給我一些關於下面的代碼有什麼問題的建議。

def update_expression 
    @emi_ids_array = params[:emi_ids].split(/,/) 
    @sub_id = params[:sub_id] 

    @emi_ids_array.each do |emi_id| 
    @existing_exp = Expression.find(:first, :conditions => [ "EXT_EMI_ID = ? and EXT_SUB_FK = ?", emi_id, @sub_id]) 
    @expression = @existing_exp.update_attributes(
     :EXT_SUB_FK => @sub_id, 
     :EXT_PRESENCE => "present", 
     :EXT_STRENGTH => "weak", 
     :EXT_EMI_ID => emi_id 
    ) 
    end 
end 
+0

只是檢查,但被正確地傳遞給函數的PARAMS - 也許提出params.inspect來檢查。這是Rails 2或3嗎? (如果3可能將Expression.find語句更改爲Expression.where)。 Expression.find是否返回任何結果?在控制檯中用一些已知的參數嘗試它並檢查返回的@existing_exp? – Pasted

+0

是的,find方法返回正確的值 – tanya

+1

也許嘗試小寫的列名 - 不知道ruby和rails如何與大寫的列名稱行爲,因爲它們不會被視爲常量?認爲你可以解決這個問題,使自己的getter和setter方法(很老的http://snippets.dzone.com/posts/show/2034)或Rails 3的變體(http://stackoverflow.com/questions/ 4605543/rails-3-easy-work-with-pascal-case-column-names) – Pasted

回答

0

找到了一個臨時解決方案。 「update_attributes方法」似乎並沒有工作,所以我選擇了「update_all」屬性

Expression.update_all({:EXT_PRESENCE => "present", :EXT_STRENGTH => "weak"},['EXT_EMI_ID = ? and EXT_SUB_FK = ?', emi_id, @sub_id]) 

希望,它可能是別人有用

0

嘗試將ID(和sub_id)數組轉換爲整數。

是否發現失敗的對象或更新?在更新調用後輸出@expression.errors,查看是否有任何驗證失敗。

是否有所有實例變量的原因?如果變量不超出該方法,則不需要@。同樣,@表達式項目看起來多餘,你只需要複製@existing_exp對象,你不需要把返回值放入一個新的對象中,特別是當每次循環運行時它都被替換。

+0

這些ID格式爲EMI:222,所以我不能將它們轉換爲整數。 – tanya

+0

它能夠找到對象。只有更新失敗 – tanya

相關問題