使用AJAX / Ruby on Rails在局部模板中定义局部变量

时间:2012-03-18 01:23:51

标签: jquery ajax ruby-on-rails-3 partial-views

我有一个深度嵌套的局部视图,我在其中迭代@users的集合。控制器如此定义@users

class UsersController < ApplicationController

def following
  @users = @user.followed_users
  ..
end

在部分模板中,我遍历集合,但我从未将集合的个体定义为实例变量,而是将局部变量与:object一起传递:

<% if current_user.following?(user) %>
  <%= render partial: 'unfollow', object: user, as: :user %>
<% else %>
  <%= render partial: 'follow', object: user, as: :user %>
<% end %>

问题是......

例如,在处理关注操作的create.js.erb文件中,我使用以下代码:

$('#follow_form').html("<%=j render partial: 'users/unfollow', object: user, as: :user %>");

这从我的开发日志中给出了以下错误:

ActionView :: Template :: Error(#&lt;#:0x007fa17b9e57e0&gt;未定义的局部变量或方法`user'):

我是否在jQuery中声明了部分错误?我是否必须在其他地方定义user,就像在控制器中一样?如果是这样如何将集合的个体定义为实例变量

提前致谢!

编辑:包含关联的控制器

以下是处理请求的关联控制器:

class RelationshipsController < ApplicationController

def create
debugger
@user = User.find(params[:relationship][:followed_id])
current_user.follow!(@user)
respond_to do |format|
  format.html { redirect_to @user }
  format.js
end
end

1 个答案:

答案 0 :(得分:0)

@Dipil帮我解决了用控制器中设置的实例变量user替换局部变量@user的简单解决方案。这非常有效。

经过一些小的重构后的最终输出:

$("#follow_form").html("<%=j render partial: 'users/unfollow', locals: { user: @user } %>");