使用友好ID和i18n与update_attributes导致覆盖

时间:2011-09-20 07:22:33

标签: ruby-on-rails ruby internationalization update-attributes friendly-id

是: - Rails 3.0.3 - Friendly_id 4.0.0 Beta 11 - Windows - 根据“宝石列表”

设置向上: 我有一个多语言网站,关于使用瑞典语和英语作为语言进行计算。我正在使用friendly_id来创建seo友好的URL。

在我的mysql表中,我有列“slug”,“slug_se”和“slug_en”。我不确定是否需要使用“slug”列,它与“slug_en”相同。

问题: 使用“update_attributes”时,它会用“slug”(默认为英文)覆盖“slug_se”。因此,“slug”中的值写在“slug_se”中。

疑难解答:   - 我已经用Google搜索了这个问题,并且只在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

2 个答案:

答案 0 :(得分:3)

我是FriendlyId的作者。你可能有更好的运气在项目的Github问题中提出这个问题,我碰巧偶然看到了这个问题。

i18n模块仍然很新,很抱歉不稳定并感谢您的反馈。 :)

在回答关于slug专栏的问题时,你根本不应该拥有它:只是slug_en和slug_se。这是9月4日的变化:

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

所以尝试删除该列。如果您的问题仍然存在,请随时在Github上发布错误报告,我会尽快查看。

与此同时,我将尝试添加测试以尝试重现您描述的问题,如果我可以重现它,我肯定会修复它。

答案 1 :(得分: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 LOAD它选择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"}

我做了一个加注计算.friendly_id.inspect并显示“procent”。