我正在展示一个带有表格的帖子集合,以及#39;喜欢'每个人都有一个帖子。我也在帖子页面中使用相同的操作。
我的代码适用于format.html但是使用Ajax我收到了一个错误:
NameError(未定义的局部变量或方法`micropost' .... microposts / _like_grid.html.erb:2
我认为它的工作原理是纯HTML,因为我在重定向到原始页面时得到了params。
我读过许多S.O.回答但我仍然对如何将变量传递给partials感到困惑。在一个帖子页面我很容易理解,因为从一个单一的对象:params但是当我需要在一个集合中做它时我感到困惑。迭代如何对每个部分渲染进行处理。
class LikesController < ApplicationController
before_action :logged_in_user
def create
@micropost = Micropost.find(params[:micropost_id])
current_user.like!(@micropost, current_user)
respond_to do |format|
format.html {redirect_to :back }
format.js
end
end
...
用户/ show.html.erb:
<%= render @microposts %>
<%= will_paginate @microposts %>
视图:_micropost.html.erb
<div id="like_form">
<% if current_user.liking?(micropost) %>
<%= render partial: 'microposts/unlike_grid', locals: { micropost: micropost } %>
<% else %>
<%= render partial: 'microposts/like_grid', locals: { micropost: micropost } %>
<% end %>
</div>
_like_grid.html.erb:
<%= form_for(current_user.likes.build, remote: true) do |f| %>
<div><%= hidden_field_tag :micropost_id, micropost.id %></div>
<%= f.submit "Like" %>
<% end %>
像/ create.js.erb:
$("#like_form").html("<%= escape_javascript(render('microposts/unlike_grid')) %>");
答案 0 :(得分:0)
在micropost
like/create.js.erb
要修复它,请在渲染部分时传递micropost
:
$("#like_form").html("<%= escape_javascript(render('microposts/unlike_grid', locals: {micropost: @your_micropost})) %>");
顺便说一句,您可能先在控制器中找到@your_micropost
答案 1 :(得分:0)
您已在@microsoft
中设置实例变量action
。你只需要将它传递给你所需要的部分。在不使用locals:
密钥变量时,您不需要提供partial:
密钥变量。
$("#like_form").html("<%= escape_javascript(render('microposts/unlike_grid', micropost: @micropost)) %>");