现在我正在尝试将关注按钮添加到用户的索引页面。
我的目标是...... 当用户按下按钮一次时,按钮旁边的消息变为“跟随”。并且他或她再次推动它,消息变成“不跟随”。默认消息是“不跟随”。
然后我写了下面的代码。
☆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有效。但是当我按下某个成员的按钮时,其他成员的消息也会变成“跟随”。我不希望它这样做。我想改变我按下按钮的成员的信息。只有一个人。
我该如何解决这个问题?如果你能给我一些建议,我真的很感激。感谢。
答案 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 %>
此外,
Friend.new(...).save
而不是Friend.create()
{{1}}