【问题标题】:Getting Globalize and autocomplete to work together让 Globalize 和自动完成功能协同工作
【发布时间】:2019-09-26 08:00:45
【问题描述】:

使用 globalize gem 来管理带有自动完成功能的翻译,存在需要正确设置许多挂钩的情况。注意:这不使用 hstore AFAIK。我还没有设法找到这样做的方法。迄今为止最高效的设置 控制器:

autocomplete :nation, :name, :full => true

国家

translates :name 

查看

<%= autocomplete_field_tag 'nation_name', '', autocomplete_nation_name_itins_path, size: 35, :id_element => 'nation_id' %>

目前还没有对Globalize 创建的nation_translations 数据库表的固有引用。正如这张图片所暗示的,有一个问题:

问题 1:输入仍然绑定到基表的属性值(我还没有按照 Globalize gem 的建议清除它们。否则我会得到空白)。 can 实际上已准备好主表中 can 的所有值...在其他语言环境中键入,如西里尔文说 Канада 自然没有效果,因为该值不是 Nation 表的一部分。

有趣的是,Rails 会自动填充下拉值,提取输入内容的翻译值。

问题 2:我宁愿传递参数“nation_id”,它自然是带有表单数据的nation_translations 表的一部分。虽然我可以将, :extra_data =&gt; [:nation_id] 附加到控制器,但它没有被提交(以西里尔文为例,其中输入没有任何自动完成)

{"utf8"=>"✓", "nation_name"=>"Канада", "commit"=>"..."}

Rails.logger.info :extra_data 返回:

extra_data

现在可以克服第二个问题,因为像这样的查询

Nation::Translation.where('name = ?', "Канада").pluck('nation_id')

返回正确的结果。但是,如果自动完成功能没有与用户输入打交道,那么这一点就没有实际意义了。

如何将其配置为使用当前本地翻译自动完成用户输入?

【问题讨论】:

    标签: ruby-on-rails autocomplete rails-i18n globalize


    【解决方案1】:

    这确实可以通过创建一个具有nation_id, name, locale 属性的全新类来解决,因此可以象征性地调用。

    然而,查询调用并不是那么简单。正如 gem 所暗示的,该方法需要调整

    def autocomplete_nation_name
      term = params[:term].downcase
      locale = params[:locale]
      nationtranslations = Nationtranslation.where('locale = ? AND name LIKE ?', locale, "%#{term}%").order(:name).all
      render :json => nationtranslations.map { |nationtranslation| {:id => nationtranslation.id, :label => nationtranslation.name, :value => nationetranslation.name} }
    end
    

    干预动作方法本身提供了所有所需的余地...

    【讨论】:

      猜你喜欢
      • 2015-01-09
      • 2010-12-18
      • 1970-01-01
      • 2012-05-09
      • 1970-01-01
      • 2015-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多