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.id
到 current_member
?
根据您展示的代码,并猜测一些片段,我认为您应该有:
$("#gl_follow_<%= @followable.id %>").html...etc.
我正在尝试将 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.id
到 current_member
?
根据您展示的代码,并猜测一些片段,我认为您应该有:
$("#gl_follow_<%= @followable.id %>").html...etc.