application_helper.rb重启服务器Rails后没有刷新

时间:2013-09-10 01:19:03

标签: ruby-on-rails ruby ruby-on-rails-3

我有一个使用i18n的Rails应用程序。没关系,直到我尝试修改application_helper.rb,有一个部分代表:

 def language_css(language)

    case language
      when 'en'
        return raw '<link rel="stylesheet" type="text/css" href="/assets/stylesheets/en.css">'
      when 'es-MX'
        return raw '<link rel="stylesheet" type="text/css" href="/assets/stylesheets/es.css">'
      when 'fr'
        return raw '<link rel="stylesheet" type="text/css" href="/assets/stylesheets/fr.css">'
      when 'jp'
        return raw '<link rel="stylesheet" type="text/css" href="/assets/stylesheets/jp.css">'
      when 'ch'
        return raw '<link rel="stylesheet" type="text/css" href="/assets/stylesheets/ch.css">'
      when 'ar'
        return raw '<link rel="stylesheet" type="text/css" href="/assets/stylesheets/ar.css">'
      default
        return raw '<link rel="stylesheet" type="text/css" href="/assets/stylesheets/es.css">'
    end
  end

我尝试更改"es.css"的默认"en.css",但我看不到任何更改。 es.css文件仍然是默认的css文件,而不是en.css

所以我甚至尝试了 Ctrl C rails s几次,没有运气。

2 个答案:

答案 0 :(得分:2)

重新加载没有问题,您的case声明根本就没有按照您的想法行事。 default这是方法调用,而不是关键字。您正在寻找else。正确缩进,这一点变得清晰:

case language
when 'en'
  return raw '<link rel="stylesheet" type="text/css" href="/assets/stylesheets/en.css">'

# Skipping some cases because they’re not needed for the example

when 'ar'
  return raw '<link rel="stylesheet" type="text/css" href="/assets/stylesheets/ar.css">'
  default
  return raw '<link rel="stylesheet" type="text/css" href="/assets/stylesheets/es.css">'
end

正如我们所看到的,when 'ar'案例的第二行和第三行永远不会到达,因为它总是会返回。你想要else

case language
when 'en'
  return raw '<link rel="stylesheet" type="text/css" href="/assets/stylesheets/en.css">'

# Skipping some cases because they’re not needed for the example

when 'ar'
  return raw '<link rel="stylesheet" type="text/css" href="/assets/stylesheets/ar.css">'
else
  return raw '<link rel="stylesheet" type="text/css" href="/assets/stylesheets/es.css">'
end

您的代码最终可以更简单地编写为:

def language_css(language)
  css_file = {
    'en' => 'en.css',
    'es-MX' => 'es.css',
    'fr' => 'fr.css',
    'jp' => 'jp.css',
    'ch' => 'ch.css',
    'ar' => 'ar.css',
  }.fetch(language, 'es.css')

  raw %(<link rel="stylesheet" type="text/css" href="/assets/stylesheets/#{css_file}">)
end

答案 1 :(得分:0)

我想知道你的代码中是否有错误。我完全重写了你的方法。

def language_css(language)
  asset = language.downcase

  return raw stylesheet_link_tag(asset) if Rails.application.assets.find_asset("#{asset}.css").present?

  raw stylesheet_link_tag('es')
end

您需要将es.css重命名为es-mx.css