如果有人可以帮助我在rails应用程序中实现自动完成功能,那将是非常有帮助的。我尝试了jquery auto complete plugin。我无法实现。
我的控制器:
def new
@testers = User.find_by_sql("select * from users where id in(select user_id from user_role_assignments where role_id in (select id from roles where name like 'Tester')) order by name").paginate(:page=>params[:page],:per_page=>30)
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @release }
end
end
我想为@testers
创建自动完成功能查看代码:
= form.label :tester_tokens, "Testers"
= form.text_field :tester_tokens
感谢您的帮助,
拉姆亚。
答案 0 :(得分:5)
看一下宝石rails3-jquery-autocomplete。它应该是您实施的基础。甚至有一个example application解释了您必须采取的每个步骤,以便将其包含在您的应用程序中。
在Railscasts.com上,您会找到一个解释如何使用它的剧集:Autocomplete-association (revised)
如果它根本不起作用,你应该回来问具体问题。根据您的上述问题,您不清楚要使用自动填充的位置。它通常用于与另一个对象建立(附加)关联,您可以在其中用自动填充字段替换下拉列表或列表中的选择或复选框列表。
如果您想要选择多个项目,可以选择Railscasts episode "Token Fields"。因为你的评论声明这是你想要做的,这里有一些提示如何做(从我的应用程序复制,你必须用你的上下文替换它,它是Railscasts 258的简短版本):< / p>
jquery-rails
)jquery.tokeninput.js
包含到您的应用程序中(语法取决于您使用的版本)。在模型中包含以下代码(User
??):
class User < ActiveRecord::Base
attr_accessible :name, :tester_tokens
has_many :testers
attr_reader :tester_tokens
def tester_tokens=(ids)
self.tester_ids = ids.split(",")
end
end
在application.js
中包含以下代码:
$(function () {
$('#user_tester_tokens').tokenInput('/testers.json', {
crossDomain: false,
prePopulate: $('#user_tester_tokens').data('pre') })
});
在TestersController
中包含以下代码:
class TestersController < ApplicationController
def index
@testers = Tester.where("name like ?", "%#{params[:q]}%")
respond_to do |format|
format.html
format.json { render :json => @testers.map(&:attributes) }
end
end
end
在视图代码中更改以下行:
= form.text_field :tester_tokens, "data-pre" => @user.testers.map(&:attributes).to_json
您将找到所有这些步骤的说明,以及Railscasts episode 258的更多背景信息。