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 の最後に追加すると、何も得られなくなりましたautocomplete は TokenInput フィールドに結果を返します (「No Results」を返します)。
たとえば、「http://localhost:3000/friendships.json?q=k」のように、手動で URL に q パラメータを入力すると、空の配列になってしまいます。first_name 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 パラメータがユーザーの first_name の最初の文字を見つけることができません。誰でもこれについて何か考えがありますか?