从表中排序数据时I18n.locale麻烦

时间:2012-03-23 16:58:39

标签: ruby-on-rails database internationalization locale

我的应用程序rails和locale params有点问题。

我在routes.rb文件中成功启用了所有控制器的路由,并在URL和控制器之间使用了我的:locale值。

当控制器需要使用方法“Data.find(:all)”或“Data.all”或自定义条件从一个表中显示多个数据的排序以查看全部时,我收到路由错误。

如果只有一个ID或ONE参数过滤的数据只能渲染一个数据,那么一切正常。

在日志中我只看到“500内部错误”和我在网站上看到的错误(开发模式)。

以下是完整的错误代码:

No route matches {:action=>"edit", :controller=>"translation_english_words", :locale=>#<TranslationEnglishWord id: 1, data: "song", transvalue: "choubidoubop">}

网址为:“http:// domain / fr / translation_english_words”(:domain /:locale /:controller)

我的控制器是“translation_english_words”,并且在我的数据库中有一个同名的表。

该表有3列,id:autoincrement,data:string,transvalue:string

我看到路线中的“:locale”部分不包含“fr”“en”或其他区域设置必须包含。并且它不包含以开头并以”结束的数据,因为所有其他参数如“:action”“:控制器“

实际上我需要区域设置来检测所希望的语言。

不使用任何“t(:value)”进行翻译atm。

此错误不仅发生在此控制器上,而且发生在需要从任何表中排序多个UNIQUE范围数据的EACH控制器上。

有人知道如何解决我的问题吗?

2 个答案:

答案 0 :(得分:1)

很高兴知道您的路线have you followed the guides的实际实施情况?看来你应该有这样的事情:

# config/routes.rb
scope "/:locale" do
  resources :translation_english_words
  # [...] # all other controllers
end

我不确定你

  

在routes.rb

中成功启用了所有控制器的路由

实际上你的控制器被解释为locale,这让我觉得路由尝试是不同的。

此外,我无法理解您的网址:http://domain/fr/translation_english_words 如果您在本地开发环境中工作,那么这不应该是“:http://domain.lvh.me:3000/fr/translation_english_words吗?”

答案 1 :(得分:0)

大家好,我发现“为什么”路线失败了。

这似乎导致了破解的路线:

控制器:

<pre>
    def index
    @translation_english_word = TranslationEnglishWord.all
    end
</pre>

查看:

<pre>
    &lt;% for translation_english_word in @translation_english_word %&gt;
    &lt;%= link_to "Edit", 
    edit_translation_english_word_path(translation_english_word) %&gt;&lt;br /&gt;
    &lt;% end %&gt;
    &lt;%= link_to "New English Translation", new_translation_english_word_path %&gt;
</pre>

调用edit_translation_english_word_pathnew_translation_english_word_path的路径似乎打破了路线。 我不知道为什么,但删除它们,解决了我的问题,但仍然不清楚为什么会发生这种情况,我想了解为什么有人可以对我发表评论?