Reputation: 453
I'm trying to add ajax to my app so a user can follow another user without reloading the page, but I'm getting the following error:
Edit - correct issue
undefined local variable or method `member' for #<#<Class:0x79c3cb0>:0x78b26e0>
Extracted source (around line #1):
$("#gl_follow_<%= member.id %>").html("<%= escape_javascript(render :partial => 'shared/follow_member2', :locals => {:member => @followable}) %>");
Here's all my relevant code:
controllers/follows_controller.rb
class FollowsController < ApplicationController
before_filter :authenticate_member!
def create
current_member.follow(followable)
respond_to do |format|
format.html # index.html.erb
format.js
end
end
def destroy
current_member.stop_following(followable)
respond_to do |format|
format.html # index.html.erb
format.js
end
end
end
controllers/follows_members_controller.rb
class FollowsMembersController < FollowsController
def followable
@followable ||= Member.find_by_user_name(params[:member_id])
end
end
views/search/search.html.erb
<div id="member_list_wrap">
<%= render partial: 'members', :collection => @members, :as => :member %>
</div>
views/search/_members.html.erb
<div id="member_item_wrap">
<div class="avatar">
<%= follow_profile_link member, title: member.full_name, alt: member.full_name %>
</div>
<% if current_member != member && member_signed_in? %>
<span id="gl_follow_<%= member.id %>" class="gl_follow">
<%= render :partial => "shared/follow_member2", :locals => {:member => member} %>
</span>
<% end %>
</div>
views/shared/_follow_member2.html.erb
<% if current_member.following?(member) %>
<%= link_to (image_tag("Following.png", class: "gl_fol") + " Following"), member_follow_path(member.to_param, current_member.get_follow(member).id), :method => :delete, :remote => true, title: "Unfollow", alt: "Unfollow", :class => "btn btn-follow" %>
<% else %>
<%= link_to (image_tag("Follow.png", class: "gl_fol") + " Follow"), member_follows_path(member.to_param), :method => :post, :remote => true, title: "Follow", alt: "Follow", :class => "btn btn_gl_fol" %>
<% end %>
views/follows_members/create.js.erb
$("#gl_follow_<%= member.id %>").html("<%= escape_javascript(render :partial => 'shared/follow_member2', :locals => {:member => @followable}) %>");
I'm not sure what I'm missing. I've been able to get ajax working on a single users' page but can't get this working when there are multiple instances on users listed on the page.
I'm using member.id
to specify which button the ajax needs to work on.
Can someone help me with this? Thanks in advance.
Upvotes: 1
Views: 688
Reputation: 27971
Based on the code you've shown, and guessing a few pieces, I think you should have:
$("#gl_follow_<%= @followable.id %>").html...etc.
Upvotes: 1
Reputation: 24367
The views/follows_members/create.js.erb template references @member.id
, but I do not see it being set any where in your code and everything else references current_member
. If current_member
is accessible from the view change @member.id
to current_member
?
Upvotes: 0