用户按下按钮时不跟随转动,反之亦然

时间:2013-12-21 17:41:35

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2

现在我正在尝试将关注按钮添加到用户的索引页面。

我的目标是...... 当用户按下按钮一次时,按钮旁边的消息变为“跟随”。并且他或她再次推动它,消息变成“不跟随”。默认消息是“不跟随”。

然后我写了下面的代码。

☆index.html.erb(members_controller)

<% @members.each do |member| %>
   <td>
        <div class="onoff">
            <% unless session[:user_id] == member.id %>
             <%= link_to'on/off', {:controller => 'members', :action => 'index', :id =>
                  member.id}, class: "btn btn-midium btn-primary"%><br/>

               <% if @isFr %>
                  ※following
               <% else %>
                  ※not following
               <% end %>
             <% end %>  
         </div>
    </td>

☆members_controller

def index

 @members = Member.where("id >=1").order("created_at desc").paginate(:page => params[:page], :per_page => 10).scoped
    if Friend.where(:member_id => session[:user_id], :friend_id => params[:id]).exists? then
       Friend.where(:member_id => session[:user_id], :friend_id => params[:id]).each do |f|
        f.destroy
        end
    else
       Friend.new({:member_id => session[:user_id], :friend_id =>params[:id].to_i}).save
    end


      @members.each do |m|
      @isFr = Friend.where(:member_id => session[:user_id], :friend_id => 
      m.id ).count > 0  
      end 
end

结果,.save和.destroy有效。但是当我按下某个成员的按钮时,其他成员的消息也会变成“跟随”。我不希望它这样做。我想改变我按下按钮的成员的信息。只有一个人。

我该如何解决这个问题?如果你能给我一些建议,我真的很感激。感谢。

1 个答案:

答案 0 :(得分:0)

您在每次迭代中都会覆盖@isFr变量的值。您必须使用一些数据结构来存储所需的信息。 例如:

@isFr = {}
@members.each do |m|
  @isFr[m.id] = Friend.where(:member_id => session[:user_id], :friend_id => m.id ).count > 0  
end 

然后在您的视图中,您可以检查用户是否关注成员,如下所示:

<% @members.each do |member| %>
   <td>
        <div class="onoff">
            <% unless session[:user_id] == member.id %>
             <%= link_to'on/off', {:controller => 'members', :action => 'index', :id =>
                  member.id}, class: "btn btn-midium btn-primary"%><br/>

               <% if @isFr[member.id] %>
                  ※following
               <% else %>
                  ※not following
               <% end %>
             <% end %>  
         </div>
    </td>
<% end %>

此外,

  1. 您也可以使用Friend.new(...).save而不是Friend.create() {{1}}
  2. 您应该将开/关逻辑分开 完成另一个操作,然后在完成.save /后重定向到索引操作 .destroy