【问题标题】:Rails ajax undefined local variable or methodRails ajax 未定义的局部变量或方法
【发布时间】:2015-04-20 08:02:06
【问题描述】:

我正在尝试将 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 需要处理的按钮。

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

【问题讨论】:

    标签: jquery ruby-on-rails ajax null


    【解决方案1】:

    根据您显示的代码,并猜测几部分,我认为您应该有:

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

    【讨论】:

    • 啊,就是这样。知道这是我忘记的事情。谢谢!
    • 不客气,很高兴这是一个简单的修复。不要个人认为,但我已经提交了您的问题以供结束,因为这只是一个简单的错字,这个问题/答案可能不会帮助遇到它的其他人。
    【解决方案2】:

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

    【讨论】:

    • 它正在调用这个&lt;span id="gl_follow_&lt;%= member.id %&gt;" class="gl_follow"&gt;。我删除了 @ 并收到此错误 undefined local variable or method 'member'。为什么说它是未定义的?
    • 根据您的所有其他代码,您应该使用current_member
    • 我正在使用成员,因此我可以指定 ajax 应该在哪个按钮上工作,因为有多个用户通过关注按钮列出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-02
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多