簡體   English   中英

Rails使用form_for和Ajax顯示一系列對象

[英]Rails showing series of objects with form_for and Ajax

我試圖顯示“興趣”列表,用戶可以通過單擊與興趣圖片相關的按鈕來“關注”。 單擊關注興趣的按鈕后,興趣(及其對應的圖像)應從列表中消失。

單擊“跟隨”按鈕時,我在由Relationship控制器調用的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

您需要提供一些東西來區分同一頁面上的不同“ follow_forms”。 否則,jQuery將僅選擇第一個元素,並僅刪除該元素。

一種方法是將“ interest.id”附加到follow_form 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())

您的控制器動作可以保持不變。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM