Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在保存到数据库之前在保存过滤器中运行JavaScript函数来替换某些值?_Javascript_Ruby On Rails_Before Save - Fatal编程技术网

如何在保存到数据库之前在保存过滤器中运行JavaScript函数来替换某些值?

如何在保存到数据库之前在保存过滤器中运行JavaScript函数来替换某些值?,javascript,ruby-on-rails,before-save,Javascript,Ruby On Rails,Before Save,我已经分类了,哪个用户选择。若用户选择“Auto”,我需要用result替换它,那个么是什么赋予了我JavaScript函数设置的默认浏览器语言呢 下面是JS函数的JavaScript示例- 这是我在网站模型中保存前的过滤器: before_save :auto_language def create website = current_user.websites.new params[:website] if @website.language == "Auto" @website.

我已经分类了,哪个用户选择。若用户选择“Auto”,我需要用result替换它,那个么是什么赋予了我JavaScript函数设置的默认浏览器语言呢

下面是JS函数的JavaScript示例-

这是我在网站模型中保存前的过滤器:

before_save :auto_language

def create
 website = current_user.websites.new params[:website]
 if @website.language == "Auto"
  @website.language = request.env['HTTP_ACCEPT_LANGUAGE'].scan(/^[a-z]{2}/).first
 end
...
#error
undefined local variable or method `request' for #<Website:0x244e1b0>
保存前:自动语言 def创建 网站=当前用户.websites.new参数[:网站] 如果@website.language==“自动” @website.language=request.env['HTTP_ACCEPT_language'].scan(/^[a-z]{2}/)。首先 结束 ... #错误 未定义的局部变量或方法“请求”#
有人能帮我解决这个麻烦吗?非常感谢您的帮助。

您不应该使用Javascript设置默认语言环境

看看这个:

他们使用Ruby来检测区域设置

def set_locale
   logger.debug "* Accept-Language: #{request.env['HTTP_ACCEPT_LANGUAGE']}"
   I18n.locale = extract_locale_from_accept_language_header
   logger.debug "* Locale set to '#{I18n.locale}'"
end  

private

def extract_locale_from_accept_language_header
    request.env['HTTP_ACCEPT_LANGUAGE'].scan(/^[a-z]{2}/).first
end
如果要获得完整语言,可以使用开关盒:

def full_language_name(lang) 
  case lang
    when 'ru'
      return 'Russian'
    when 'en'
      return 'English'
    when 'fr'
      return 'French'
    else
      return 'English'
end
如果这些条件均未得到验证,“else”情况是默认行为。 关键字“return”是可选的


希望这有帮助

我不需要使用本地化,我只需要将正确的网站(模型)语言放入数据库-如果用户选择自动,则为默认浏览器语言。好的,这一行:request.env['HTTP_ACCEPT_language']]。scan(/^[a-z]{2}/)。首先将返回导航器语言的两个字母哦,对不起。我有点傻。。。谢谢。还有一件事——我需要全名。有可能吗?呃,我不认为有可能。。。行
request.env['HTTP\u ACCEPT\u LANGUAGE']
返回
fr,fr;q=0.8,在美国;q=0.6,en;q=0.4
对于我的电脑,只需要语言环境和“国家语言”