1

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.

2 Answers 2

1

Based on the code you've shown, and guessing a few pieces, I think you should have:

$("#gl_follow_<%= @followable.id %>").html...etc.
Sign up to request clarification or add additional context in comments.

2 Comments

Ah yes that was it. Knew it was something I was forgetting. Thank you!
You're welcome, glad it was a simple fix. Don't take it personally, but I've submitted your question for closing because it was just a simple typo and this question/answer probably won't help anyone else who comes across it.
0

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?

3 Comments

It was calling to this <span id="gl_follow_<%= member.id %>" class="gl_follow">. I removed the @ and I get this error undefined local variable or method 'member'. Why is it saying it's undefined?
Based on all your other code it looks like you should be using current_member
I'm using member so I can specify which button the ajax should be working on as there are multiple users being listed with a follow button.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.