Rails ajax 未定义局部变量或方法

Rails ajax undefined local variable or method

我正在尝试将 ajax 添加到我的应用程序中,以便用户可以在不重新加载页面的情况下关注另一个用户,但我收到以下错误:

编辑 - 更正问题

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}) %>");

这是我所有的相关代码:

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}) %>");

我不确定我错过了什么。我已经能够让 ajax 在单个用户的页面上工作,但是当页面上列出的用户有多个实例时我无法让这个工作。

我正在使用 member.id 来指定 ajax 需要在哪个按钮上工作。

有人可以帮我解决这个问题吗?提前致谢。

views/follows_members/create.js.erb 模板引用 @member.id,但我没有看到它在您的代码中的任何位置设置,其他所有内容都引用 current_member。如果 current_member 可从视图更改 @member.idcurrent_member?

根据您展示的代码,并猜测一些片段,我认为您应该有:

$("#gl_follow_<%= @followable.id %>").html...etc.