我正在尝试渲染部分内容,但它没有使用我的@user_name
变量。在控制器中渲染局部时,是否需要做一些特殊的操作才能传入变量?
查看Rails指南,我没有看到任何说@instance_variables不可用的部分。
这是我的用户#new controller:
def new
if signed_in?
redirect_to current_user
else
@user = User.new
end
# Used to show "log in" instead of "sign up" on render. Set in URL request.
if params[:show_log_in] == true
@show_log_in = true; //???? doesn't seem to get passed into partial.
end
respond_to do |format|
format.html {}
# JS is used for modal windows when this is accessed asynchronously.
# e.g. a button is clicked that requires user to be signed in.
format.js { render "shared/_signup_modal.html.erb" } //???? @show_log_in doesnt seem to get passed in?
end
end
答案 0 :(得分:1)
您需要传递变量。在您的respond_to块中,您需要format.js {@show_log_in}
。我通常使用respond_to
和respond_with
。它更漂亮。
然后,您必须在视图中进行调整。
<强> new.js.erb 强>
$('#selector').html("<%= j render partial: 'shared/_signup_modal' %>");
您正在渲染的部分内容可以访问您传递的@variables
。
答案 1 :(得分:0)
控制器中定义的实例变量在视图中可用,包括部分。毫无疑问。但问题不在这里。
问题在于params
。 params
个值都在String中。因此,评估if params[:show_log_in] == true
是错误的并且始终返回false,并且永远不会发送在那里定义的实例。
您需要将其比较为字符串。
if params[:show_log_in] == "true"
此外,在JS响应中呈现HTML部分并不好。我不确定这是否有效但合法的方式是呈现js.erb
文件。