我有一个深度嵌套的局部视图,我在其中迭代@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
答案 0 :(得分:0)
@Dipil帮我解决了用控制器中设置的实例变量user
替换局部变量@user
的简单解决方案。这非常有效。
经过一些小的重构后的最终输出:
$("#follow_form").html("<%=j render partial: 'users/unfollow', locals: { user: @user } %>");