我正在尝试使用 TokenInput 插件创建一个令牌字段,以将成员(仅创建组的用户的朋友)添加到组。
所以,我在这里有我的友谊控制器代码:
class FriendshipsController < ApplicationController
def index
@friend_list = @current_user.friends.map { |f| {:id => f.id, :name => f.first_name + ' ' + f.last_name}}
respond_to do |format|
format.html # index.html.erb
format.json { render json: @friend_list }
end
end
这会在 url "/friendships.json" 处返回一个数组,如下所示:
[{"id":6,"name":"John Smith"},{"id":7,"name":"Jane Doe"}]
然后,我有我的表单,下面是 TokenInput 的 jquery:
<%= form_for(@group) do |f| %>
<div class="field">
<%= f.label :group_name, "Name" %><br />
<%= f.text_field :group_name %>
</div>
<div class="ui_widget">
<%= f.label :member_tokens, "Members" %><br />
<%= f.text_field :member_tokens %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
<script>
$(function() {
$('#group_member_tokens').tokenInput("/friendships.json");
});
</script>
我的问题是,如何过滤 /friendships.json 中的数组?我尝试在 FriendshipsController 中执行以下操作:
friend_list = @current_user.friends.map { |f| {:id => f.id, :name => f.first_name + ' ' + f.last_name}}
@friend_list = friend_list.where("name LIKE ?", "%#{params[:q]}%")
...但这只会在 /friendships.json 中返回一个空数组。
如果有人能让我知道为什么这会返回一个空数组,我将不胜感激。
更新:
我试过这样做:
@friend_list = @user_name.friends.where("name LIKE ?", "%#{params[:q]}%")
@friend_list = @friend_list.map { |f| {:id => f.id, :first_name => f.first_name + ' ' + f.last_name}}
...但是当我将代码 ".where("name LIKE?", "%#{params[:q]}%")" 添加到 @friend_list = current_user.friends 的末尾时,我不再得到任何TokenInput 字段中的自动完成结果(它返回“No Results”)。
当我在 URL 中手动输入 q 参数时,例如“http://localhost:3000/friendships.json?q=k”...我最终得到一个空数组。这很奇怪,因为我的应用程序中有一个名为 Kevin 的用户。
这是我的 ruby 服务器上输出的内容:
Started GET "/friendships.json?q=ke" for 127.0.0.1 at 2012-09-16 19:27:53 -0400
Processing by FriendshipsController#index as JSON
Parameters: {"q"=>"ke"}
[...]
User Load (0.7ms) SELECT "users".* FROM "users" INNER JOIN "friendships" ON "users"."id" = "friendships"."friend_id" WHERE "friendships"."user_id" = 2 AND (first_name LIKE '%ke%')
[...]
但是,我只是尝试在 tokenInput text_field 中输入“evin”,它找到了用户。由于某种原因,q 参数找不到用户名字的第一个字母。有人对此有任何想法吗?