我正在使用https://github.com/crowdint/rails3-jquery-autocomplete,它似乎正在运作。唯一的问题是让我说我有一个字段在所有帖子标题上执行自动完成,但我希望它只显示用户创建的帖子标题。
有没有办法做这样的事情?即一个find_by还是什么?
谢谢!
-Elliot
修改
它在文档中说:
If you want to display a different version of what you're looking for, you can use the :display_value option.
This options receives a method name as the parameter, and that method will be called on the instance when displaying the results.
class Brand < ActiveRecord::Base
def funky_method
"#{self.name}.camelize"
end
end
class ProductsController < Admin::BaseController
autocomplete :brand, :name, :display_value => :funky_method
end
In the example above, you will search by name, but the autocomplete list will display the result of funky_method
我觉得这可以用来做我想要完成的事情,但我不知道从哪里开始?
答案 0 :(得分:7)
您可以覆盖get_autocomplete_items
,但首先使用超级来调用原始 get_autocomplete_items
方法,然后按过滤结果current_user.id (如果帖子的所有者不是当前用户,则为post.user.id)
def get_autocomplete_items(parameters)
items = super(parameters)
items = items.where(:user_id => current_user.id)
end
这样你仍然可以使用gem附带的所有其他选项。这应该在您的控制器中完成。
另一个答案建议使用:scope
选项。我调查了一下,但在这种情况下不是这样,你不想在你的模型中添加“current_user”等类似的东西。
答案 1 :(得分:2)
你应该覆盖方法 get_item ,例如在这种情况下,我正在过滤用户列表,只考虑最后一个:
class UsersController < ApplicationController
autocomplete :user, :email, :full => true
def index
@users = User.all
end
def get_items(parameters)
[User.last]
end
我认为最后一次提交之一,改变了方法(#get_items)的名称。检查 autocomplete.rb 文件的版本。
答案 2 :(得分:1)
即使我没有亲自测试过,我认为rails3中的正常范围方法应该可行。因为在所有范围之后也是与“funky_method”相同的方法
写一个范围
在您的模型中
范围:funky_method,lambda {| param1 | :conditions =&gt; {:column = param1} }
并在您的控制器中
autocomplete:brand,:name,:display_value =&gt; :funky_method
应该工作,试着看看..
欢呼声
sameera