在不同的模型/控制器上使用 rails-jquery-autocomplete

Posted

技术标签:

【中文标题】在不同的模型/控制器上使用 rails-jquery-autocomplete【英文标题】:Using rails-jquery-autocomplete on varying model/controller 【发布时间】:2016-03-25 18:30:05 【问题描述】:

我正在为我的 Rails 项目使用 rails-jquery-autocomplete gem,它带有普通表单助手,其中一个模型的数据位于多个控制器/视图上。就像假设我有一个 cmets 模型并在很多场合使用 cmets。

在这种特殊情况下,我在管理命名空间中使用了多个表单。对于普通的选择字段,我有一个可行的解决方案,但正如您可以想象的那样,可供选择的选项会随着时间的推移而增加,我不希望有一个包含数百个结果的选择字段。因此,我希望它变成一个自动完成的文本字段。但我不知道如何访问正确的数据。

在我的示例中,我在外国管理员控制器上使用@gallery 的表单。在现在的表格中,我让编辑选择哪个@game 属于@gallery。像这样:

<%= form_for(@gallery) do |f| %>
...
<%= f.select :game_id, options_for_select(@games.map |g| [g.name, g.id]) %>
...
<% end %>

如果我使用

<%= f.autocomplete_field :name, autocomplete_name_games_path %>

相反,它告诉我,:name 不适用于我的 @gallery 对象,这是真的,到目前为止,我将 autocomplete :name 添加到游戏控制器中,因为它应该填充来自它的数据。 但我想我也可以在管理控制器的表单中使用游戏控制器的 :name 的自动完成功能。

当我尝试将它与:game_id 一起使用时

<%= f.autocomplete_field :game_id, autocomplete_name_games_path %>

然后它告诉我 id 丢失了,我添加了 :id_element =&gt; '#some_element' 以及我添加的隐藏字段的正确值。我检查了源代码并且隐藏字段在那里,但这不会更改此自动完成 gem 上的错误消息。

也许有人可以告诉我,如何在外部控制器的视图中使用 rails-jquery-autocomplete gem 访问数据?

【问题讨论】:

【参考方案1】:

我通过反复试验发现了几件事,现在可以按照我的意图使用这个插件。因此,我想提供一个答案。也许其他人可以使用它,至少有人投票支持我的问题......

    您可以将autocomplete 方法添加到您想要的每个控制器,适用于您想要的每个模型。起初我以为我必须在我想要结果的特定控制器上使用它,因为插件自述文件中的示例倾向于巧合地提出这一点。所以使用:

    class AdminController < ApplicationController
    ...
    autocomplete :game, :name
    

    在我的 AdminController(或其他所有控制器)中,可能会按名称搜索/自动完成游戏模型的数据。

    然后插件上的自述文件非常模糊地描述了要做什么以及必须如何使用:id_element =&gt; '#some_element' 或它的相似之处(参见https://github.com/bigtunacan/rails-jquery-autocomplete#getting-the-object-id)。我以为我必须添加一个id字段并自己输出我选择的相应id。这不是必要的。 autocomplete 元素的对象 ID 始终存在,但不直接在 html 中输出,仅在选择时输出。 相反,必须更改每个表单元素具有的正常 id 的值。在我的一个示例中,表单字段的 id 是:id="image_game_id"。因此我不得不像下面这样使用它:

    <%= f.autocomplete_field :game_id, admin_autocomplete_game_name_path, :id_element => '#image_game_id' %>
    

    我唯一不知道的是,当被选中时,如何在表单字段中显示名称而不是 ID。一旦我知道如何做到这一点,我将编辑我的答案。也就是说,在可能的情况下。

【讨论】:

以上是关于在不同的模型/控制器上使用 rails-jquery-autocomplete的主要内容,如果未能解决你的问题,请参考以下文章

在 cakePHP 上使用单数和复数模型名称访问模型的差异

具有多个行为模型的 ViewController

使用一个工匠命令制作模型、迁移和控制器,但控制器需要在不同的目录中

OSI模型

rails同一页面上不同控制器的两种形式

胖模型和瘦控制器听起来像是在创造上帝模型