0

ユーザーが興味の画像に関連付けられたボタンをクリックして「フォロー」できる「興味」のリストを表示しようとしています。関心をフォローするボタンをクリックすると、関心 (およびそれに対応する画像) がリストから消えます。

フォローボタンがクリックされたときにリレーションシップコントローラーによって呼び出されるcreate.js.erbファイルで非表示関数を使用していますが、関数は一連の興味の最初の興味のみを非表示にします-ユーザーがクリックした興味は非表示にしますその上で消える必要があります。したがって、これを設定するためのより良い方法が必要ですが、私の人生では、それを理解することはできません. これが私の現在の設定です:

私のコントローラー

class StaticPagesController < ApplicationController
  def home
    @user = current_user
    @city = request.location.city
    @interests = Interest.all
  end

ホームページ

<%= render @interests %>

パーシャル

<div id="follow_form">                      
<div class="four columns portfolio-item interests">
    <div class="our-work">
        <a class="img-overlay">
        <%= image_tag interest.image_path %>
            <div class="img-overlay-div">
            <h4><%= interest.name %></h4>
            </br>
            <h5>Placeholder
            </br>
            <%= interest.desc %></h5>
            <%= form_for(current_user.relationships.build(followed_id: 
                             interest.id), remote: true) do |f| %> 
                <div><%= f.hidden_field :followed_id %></div>
                <%= f.submit "I'm interested", class: "b-black" %>
            <% end %>
            </div>
        </a>
        <h3><a href="#"><%= interest.name %></a><span>features info</span></h3>
    </div>
   </div>
</div>

そして、ボタンをクリックしたときに Relationships コントローラーによって呼び出される create.js.erb :

$("#follow_form").hide();

更新 追加の明確化のためのリレーションシップコントローラーは次のとおりです

def create
  @interest = Interest.find(params[:relationship][:followed_id])
  current_user.follow!(@interest)
  respond_to do |format|
      format.html { redirect_to(root_url) }
      format.js 
   end
end
4

1 に答える 1

1

同じページにあるさまざまな「follow_forms」を区別するために何かを提供する必要があります。それ以外の場合、jQuery は最初の要素のみを選択し、その要素のみを削除します。

これを行う方法の 1 つのアイデアは、follow_form id の末尾に「interest.id」を追加することです。

パーシャルを次のように更新します (パーシャルが呼び出され、/app/views/interests/_follow_form.html.erb にあると仮定します:

<div id="follow_form<%="#{interest.id} %>">                      
<div class="four columns portfolio-item interests">
    <div class="our-work">
        <a class="img-overlay">
        <%= image_tag interest.image_path %>
            <div class="img-overlay-div">
            <h4><%= interest.name %></h4>
            </br>
            <h5>Placeholder
            </br>
            <%= interest.desc %></h5>
            <%= form_for(current_user.relationships.build(followed_id: 
                             interest.id), remote: true) do |f| %> 
                <div><%= f.hidden_field :followed_id %></div>
                <%= f.submit "I'm interested", class: "b-black" %>
            <% end %>
            </div>
        </a>
        <h3><a href="#"><%= interest.name %></a><span>features info</span></h3>
    </div>
   </div>
</div>

このようにして、各 follow_form に一意の ID が関連付けられます。次に、興味をループして、次のようにそれぞれのパーシャルを呼び出すことができます。

ホームページ:

<% @interests.each do |interest| %>
  <%= render 'interests/follow_form', :interest => interest %> 
<% end %>

create.js.erb

$("#follow_form_<%= "#{@interest.id}" %>").hide())

コントローラーのアクションは同じままでかまいません。

于 2013-09-13T00:53:25.553 に答える