iamdhunt
iamdhunt

Reputation: 453

Rails ajax undefined local variable or method

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

Answers (2)

smathy
smathy

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

infused
infused

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

Related Questions