0

グループ機能を実装するアプリがあります。各グループには n 人のメンバーがいます。また、各グループには、グループ固有のプロフィール写真があります。

グループ名のみを念頭に置いて、グループ機能のオートコンプリートを実装できました。同じことについて、次のチュートリアルを参照しました。- http://railsforum.com/viewtopic.php?id=23188

プロジェクト固有の目的でruby​​ 1.8.7rails 2.0.2を使用しています。auto_complete プラグインを適切なディレクトリにインストールしました。私はUbuntu 10.04 OSを使用しています

グループの現在のオートコンプリート機能の一部として、さらに 2 つの機能を統合したいと考えています。

1> オートコンプリート テキスト フィールドにグループ名を入力すると、入力したテキストに基づいて表示される適切なグループ固有のプロフィール画像も表示できるはずです。

2> オート コンプリート テキスト フィールドに入力されたテキストに基づいて、各グループに対応して表示されるメンバーの数も確認できるはずです。

私は、ほぼ同じように次のハードルに直面しています。

現在、グループ名に基づいて基本的なオートコンプリート機能を取得するために実装したコードは次のようになります。

groups_controller.rb

auto_complete_for :investor_group, :title

グループindex.html.erb

<%=stylesheet_link_tag "groups"%>
<%= javascript_include_tag :defaults %>

Search for a investor group: <%= text_field_with_auto_complete :investor_group, :title,  {}, {:method => :get} %><%=submit_tag "Search"%>

config/routes.rb

map.resources :investor_group, :collection => {:auto_complete_for_investor_groups_title => :get }

現在、グループのindex.html.erbで次のコードを使用して、特定のグループの画像を表示し、グループに属するメンバーの総数を取得できます。

<%for inv_group in @investor_groups%>
<div class="inv_group_img" align="center"><%=image_tag "investor_groups/#{inv_group.title}.jpg"%></div>
  <div class="inv_group_details">
<%=inv_group.activated_members.size%><br>
<%end%>

現在、ビューの位置合わせは雑然としているかもしれませんが、それは私の当面の焦点では​​ありません。したがって、親切に、同じことを無視してください。

私は自分が何をする必要があるかについての考えを持っており、groups_controller.rbに同じコードを書くことができました

必要なものを取得するために、次のことを試しました:-

def calculate_members_count
    @investor_group = InvestorGroup.find(params[:id])
    @members_count = @investor_group.activated_members.size
    return "@members_count", :title
  end

これで、グループのタイトル/名前と members_count が表示されます。同じメソッド内でも画像を取得する方法がわかりません。

また、これから正しく動作する場合は、既に記述されているオートコンプリート機能に変更が反映されるように、いくつかの推測作業を行いました。それらが正しいかどうかはわかりません...しかし、ここにあります..

index.html.erbで次のように変更しました

Search for a investor group: <%= text_field_with_auto_complete :investor_group, :calculate_members_count,  {}, {:method => :get} %><%=submit_tag "Search"%>

groups_controller.rb auto_complete_for :investor_group,:calculate_members_countで次を変更しました

ここまで正しいかどうかは本当にわかりません。もしそうなら、 routes.rbに反映する必要がある変更を本当に理解できません

また、万が一モデルに変更を加える必要があるかどうかも尋ねたいと思いました。仕方ないとは思いますが、念のため質問させてください。

また、オート コンプリート テキスト フィールドが 1 つの属性のみのクエリ検索をサポートしている場合、この場合、要件に合わせてカスタマイズされたオート コンプリート検索を定義する必要があると思いますか? はいの場合、有利なスタートを切る方法と、それを行う方法については本当にわかりません。これにもカスタムJavaScriptが必要になるのは今だけかもしれません。

これについて私を助けてください。これに関する入力は本当に便利です..

辛抱強く読んでくれてありがとう..


Question Edited


私は Rails の初心者であり、2.5 か月の経験しかありません。

多くの検索の後、複数のフィールドにオートコンプリート機能を実装するには、カスタマイズされたオートコンプリート メソッドを使用する必要があることに気付きました。

次のチュートリアルを参照して、カスタマイズされたオートコンプリートを機能させました:- http://cobaltedge.com/auto-complete-text-fields-in-rails-2

私のカスタマイズされたオートコンプリートメソッドは次のようになります:-

 def auto_complete_for_investor_group_title
    re = Regexp.new("^#{params[:investor_group][:title]}", "i")

    #re1 = Regexp.new("^#{params[:investor_group][:title].jpg}", "i")

    find_options = { :order => "title ASC", :conditions => ['title LIKE ?', "%#{params[:title]}%"] }

   @investor_group = InvestorGroup.find(:all, find_options).collect(&:title).select { |title| title.match re }

render :inline => "<%= content_tag(:ul, @investor_group.map { |title| content_tag(:li, h(title)) }) %>"
  end

オートコンプリートのカスタマイズされたメソッドが機能するための私の index.html.erb は次のようになります:-

<% form_tag({:action => :search}) do %> 投資家グループを検索: <%= text_field_with_auto_complete :investor_group, :title, :autocomplete => "off"%><%=submit_tag "Search"%> <%終了%>

routes.rbで行われた適切な変更は次のようになります:-

  map.auto_complete ':controller/:action', :requirements => { :action => /auto_complete_for_\S+/ }, :conditions => { :method => :get }

このコードは、検索時にグループ タイトルを取得するのに適しています。このコードを変更して、グループ プロファイル固有の画像とグループに属するメンバーの総数も取得したいと考えています。

アップロードされた画像のタイプ file_field は で、属性は:uploaded_data です。

グループに属するメンバーの総数も取得する必要があります。現在、画像とグループに属するメンバーの総数は、次のコードを使用して個別に index.html.erb を介して表示されます:-

 <%for inv_group in @investor_groups%>
        <div class="inv_group contentTableGray">
          <div class="inv_group_img" align="center"><%=image_tag "investor_groups/#{inv_group.title}.jpg"%></div>
          <div class="inv_group_details">
            <span style="float:right;padding-right: 10px;"><%=show_edit_link_for_group(inv_group)%></span>
            <%=link_to inv_group.title, :action => :show, :id => inv_group%>        
            <div style="clear:both;"></div>
            <%=truncate(inv_group.description,100)%>        
          </div>
          <div class="inv_group_details" style="width:14%;text-align: center;">
            <%=inv_group.activated_members.size%><br>

          ....( code continues further.. )

また、グループのサイズは、次のようなコードを使用して groups_controller で取得できることもわかりました:-

 @investor_group = InvestorGroup.find(params[:id])
    @members = @investor_group.activated_members.size

このコードをメソッド auto_complete_for_investor_group_title に変更する方法がよくわかりません。

アクティブ化されたメンバーは、次のInvestor_group.rb モデルからの関連付けとして取得されます

has_many :activated_members, :through => :investor_group_members, :source => :investor, :conditions => "activated is true"

上記の情報を使用して、グループに属する合計メンバーとグループ固有のプロフィール写真 を、タイトルで機能する既存のオートコンプリート機能に追加する方法を理解できません 。

同じことで私を助けてくれませんか。

どうもありがとう。

4

1 に答える 1

2

だから、部分的に:

  1. 投資家グループを取得すると、「collect(&:title)」という呼び出しのタイトルのみが取得されます。オブジェクト全体を取得するには、それを削除します。
  2. 正規表現を使用する必要はありません。条件でLIKEと一致するタイトルをすでに取得しています。
  3. インラインでレンダリングする代わりに、LIタグ内で必要なものをすべてレンダリングするパーシャルを作成してみてください。インラインレンダリングとcontent_tagは、必要なのが小さなテキストだけの場合に適していますが、「大きなもの」の場合はパーシャルを優先します。

ごめんなさい。

アップデート:

collect(&:title)は、「見つけたすべてのinvestor_groupsから、タイトルのみを教えてください」と言っています。したがって、以下のみを使用して完全に削除します。

InvestorGroup.find(:all, find_options)

「見つけたinvestor_groupsを教えてください」と書かれているので、パーシャルで使用するinvestor_groupsの配列があります。これにより、index.htmlで行ったように、オートコンプリートリストに必要なデータを「for」ステートメントで表示し、「li」要素内に画像、タイトル、アクティブ化されたメンバーのサイズを含めることができます。

ごめんなさい。

再更新

もうすぐです。オートコンプリートが機能するには、オートコンプリートメソッドからの応答がリストである必要があります。したがって、パーシャルは次のようになります。

<ul>
  <% for inv_group in @investor_group2 %>
    <li><%=h inv_group.title %>, <%=h inv_group.activated_members.size %></li>
  <%end%>
</ul>

各アイテムはliタグでラップされ、すべてがulタグでラップされています。前のコードを見ると、これがまさにその仕組みです。

content_tag(:ul, @investor_group2.map { |title| content_tag(:li, h(title)) })

タイトルをラップするliコンテンツタグをラップするulコンテンツタグ。

また、2つの情報を同じものに入れようとしたことは一度もないので、タイトルとサイズを2つのerbに分けましたが、うまくいくかどうかはわかりません。

ごめんなさい。

于 2011-03-31T20:51:34.693 に答える