2

使用: - 的Rails 3.0.3 - Friendly_id 4.0.0測試版11 - 視窗 - 國際化,根據(0.6.0,0.5.0)「寶石列表「使用友好的ID和國際化與update_attributes方法的原因覆蓋

設置: 我有一個使用瑞典語和英語作爲語言進行計算的多語種網站。我正在使用friendly_id來創建適用於網絡的網址。

在我的mysql表中我有列「slug」,「slug_se」和「slug_en」。我不確定是否需要使用「slug」列,它與「slug_en」相同。

問題: 當使用「update_attributes方法」,它覆蓋「slug_se」與「塞」(默認爲英語)。因此,「slug」中的值被寫入「slug_se」。

故障排除: - 我用Google搜索這個問題,只找到一個(未回答)論壇主題在谷歌論壇(http://groups.google.com/group/friendly_id/browse_thread/thread/154f4a5024e23418),其沒有回答。 - 我試圖找到update_attributes的替代品,我可以通過mysql,但實際上並不整齊。

問題: - 我是否需要使用「slug」列? - 是否有替代update_attributes,不嘗試更新id? - 你能看到我在做什麼錯誤導致了問題?

代碼: 型號:

extend FriendlyId 
    friendly_id :name, :use => :slugged, :use => I18n 

回答

3

我FriendlyId的作者。在Github的項目中,你可能會有更好的運氣問這個問題,我碰巧偶然看到了這個問題。

i18n模塊還很新,所以對於不穩定感到抱歉,並且感謝您的反饋。 :)

在回答你關於slug列的問題時,你根本不應該擁有它:只是slug_en和slug_se。這是9月4日做出了改變:

https://github.com/norman/friendly_id/commit/54536464132ac8f72c96e8bda203c337f9d56aa0

所以嘗試刪除該列。如果您的問題仍然存在,請隨時在Github上發佈錯誤報告,我會盡快查看。

同時,我會嘗試添加一個測試來重現你描述的問題,如果我能夠重現它,我一定會修復它。

0

諾曼,謝謝。我刪除了slug列,但這並沒有解決它。好像默認的slug覆蓋了update_attributes的slug_se。

這是從日誌:

Started POST "/vardag/procent/result" for 127.0.0.1 at 2011-09-22 07:36:02 +0200 
    Processing by CalculationsController#result as HTML 
    Parameters: {"utf8"=>"Ô£ô", "authenticity_token"=>"Xrq9Zf8jGl2X1G9WvqMpcN1EQw7C2lda561FN9E7ZdM=", "first_number"=>"1.0", "second_number"=> 
"2.5", "operation"=>"from_a_to_b", "commit"=>"Beräkna", "calculation_type_id"=>"vardag", "id"=>"procent"} 
    ←[1m←[36mCalculation Load (1.0ms)←[0m ←[1mSELECT `calculations`.* FROM `calculations` WHERE (`calculations`.`slug_se` = 'procent') LIMIT 
1←[0m 
    ←[1m←[35mCalculationType Load (1.0ms)←[0m SELECT `calculation_types`.* FROM `calculation_types` WHERE (`calculation_types`.`id` = 1) LIMI 
T 1 
    ←[1m←[36mCACHE (0.0ms)←[0m ←[1mSELECT `calculations`.* FROM `calculations` WHERE (`calculations`.`slug_se` = 'procent') LIMIT 1←[0m 
    ←[1m←[35mSQL (1.0ms)←[0m BEGIN 
    ←[1m←[36mCalculation Load (1.0ms)←[0m ←[1mSELECT `calculations`.* FROM `calculations` WHERE (`slug_se` = 'percentage' OR `slug_se` LIKE ' 
percentage--%') AND (id <> 1) ORDER BY LENGTH(`slug_se`) DESC, `slug_se` DESC LIMIT 1←[0m 
    ←[1m←[35mAREL (1.0ms)←[0m UPDATE `calculations` SET `recently` = 'someone_realized,that,when,1.0,goes_to,2.5,result_percentage_a_to_b_inc 
reased,150.0,%', `slug_se` = 'percentage', `updated_at` = '2011-09-22 05:36:03' WHERE (`calculations`.`id` = 1) 

退房@ 36mCACHE它(正確地)使用slug_se = procent然後兩排下來@ 36mCalculation加載它使一個選擇,其中slug_se =百分比(百分比爲slug_en )。

我會在Git上寫一個錯誤報告!

編輯:我做了一些更多的調試,可能有所幫助:

我把這種方法在模型的更新:

def update_recently(calculation, new_recently_string) 
    raise calculation.inspect   
    calculation.update_attributes(:recently => new_recently_string.join(",")) 
    end 

加薪創建此:

#<Calculation id: 1, name: "Percentage", preimp: nil, url: nil, clicks: 71, clicks_week: 71, is_local: true, comment: nil, nofollow: true, updated: nil, calculation_type_id: 1, created_at: "2011-03-12 07:04:54", updated_at: "2011-09-22 05:53:25", last_checked: nil, calculation_status_id: 2, region_id: 1, source: nil, affiliate: false, examples: nil, recently: "someone_realized,that,when,1.0,goes_to,2.5,result_p...", is_special: false, slug_en: "percentage", slug_se: "procent"> 

的參數是:

{"utf8"=>"✓", 
"_method"=>"put", 
"authenticity_token"=>"Xrq9Zf8jGl2X1G9WvqMpcN1EQw7C2lda561FN9E7ZdM=", 
"first_number"=>"1.0", 
"second_number"=>"2.5", 
"operation"=>"from_a_to_b", 
"commit"=>"Beräkna", 
"calculation_type_id"=>"vardag", 
"id"=>"procent"} 

我做了一次raise.friendly_id.inspect並顯示「procent」。