【发布时间】:2016-03-10 13:39:44
【问题描述】:
我正在显示一个帖子集合,其中包含一个“喜欢”每个帖子的表单。我也在帖子页面中使用相同的操作。
我的代码适用于 format.html,但使用 Ajax 时出现错误:
NameError(未定义的局部变量或方法 `micropost' ....microposts/_like_grid.html.erb:2
我猜它可以在纯 HTML 中工作,因为我在重定向到原始页面时得到了 :params。
我读过很多 S.O.回答,但我仍然对如何将变量传递给部分感到困惑。在帖子页面中我很容易理解,因为从 :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')) %>");
【问题讨论】:
标签: jquery ruby-on-rails ajax