我在带有 Mongoid 的 Rails 3.0.10 应用程序中使用 rails3-jquery-autocomplete(版本 rails3-jquery-autocomplete (1.0.2))。 gem 就像一种魅力,我只有一个小问题。将不胜感激任何帮助解决它。

我基本上是在尝试在参数中传递自动完成搜索结果的 id。目前,这就是我正在做的。

在 Controller 中:

class FeaturesController < ApplicationController
  autocomplete :feature, :name
end

在 View 中:
= autocomplete_field_tag :replacement_id, ' ', autocomplete_feature_name_features_path,  :id_elements => '#replacement_id'

路由文件
resources :features do
  get :autocomplete_feature_name, :on => :collection
end

自动完成工作正常。唯一的问题是它没有传递自动完成对象的 id(使用 :id_elements => '#replacement_id'),而是传递文本。

这是我在参数中得到的:
Parameters: {"feature"=>{"status"=>"Replaced"}, "replacement_id"=>"Property agreements", "commit"=>"update_status"}

目前“replacement_id”的值为“属性协议(protocol)”,即自动完成文本。

我一直在寻找相关问题。我发现在 Github 上的问题列表中,以前版本的 gem herehere 也有类似的问题。他们已经解决了,所以我上面的设置肯定有问题。

非常感谢。

======更新======

哎呀!注意到 View 助手中有一个错字!它应该是 :id_element 而不是 :id_elements。在mo,这样做就行了,即它在参数中传递对象ID:

例如在参数中:
"replacement_id"=>"4e915ec88a812e2740000353"

但是,它会在自动完成文本框中插入对象 ID,而不是自动完成文本。可能会找到解决方法。

======更新========

为了避免无法在文本框中显示自动完成文本(目前显示 ID),我进行了以下更改:

查看:我使用了 :update_elements 选项
= autocomplete_field_tag :replacement_id, '', autocomplete_feature_name_features_path, :update_elements => {:id => '#input#replacement_id', :name => 'input#replacement_id'}

Controller :
autocomplete :feature, :name, :display_value => :replacement_name, :extra_data => [:name]

:name 是我放在模型中的一个方法:
def replacement_name
 "#{self.name}"
end

这样做会在自动完成文本框中显示文本,但现在选定的对象 id 没有在参数中传递,而是文本(与原来一样)。

最佳答案

这条线

  = autocomplete_field_tag :replacement_id, '', autocomplete_feature_name_features_path, :update_elements => {:id => '#input#replacement_id', :name => 'input#replacement_id'}

应该看起来像
= autocomplete_field_tag :replacement_id, '', controllername(ex: users)_autocomplete_feature_name_path, ....

无论如何,我在没有下一行的情况下使用了这个:
 :update_elements => {:id => '#input#replacement_id', :name => 'input#replacement_id'}

可能您有不同的任务,但请尝试一下。

关于ruby-on-rails - rails3-jquery-autocomplete,在 Rails 应用程序的参数中传递对象 ID,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7682395/

10-14 01:41