【问题标题】:Passing local variables to partials将局部变量传递给局部变量
【发布时间】: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


    【解决方案1】:

    您在like/create.js.erb 中渲染时错过了micropost

    要修复它,请在渲染局部时传递micropost

    $("#like_form").html("<%= escape_javascript(render('microposts/unlike_grid', locals: {micropost: @your_micropost})) %>");
    

    顺便说一句,您可能会先在控制器中找到@your_micropost

    【讨论】:

    • 我还是有同样的问题:NameError (undefined local variable or method `micropost' in app/views/microposts/_unlike_grid.html.erb 问题好像在_unlike_grid.html.erb里面没有.js.erb
    【解决方案2】:

    您已经在action 中设置实例变量@microsoft。你只需要把它传递给你需要的部分。并且不使用partial:键变量时不需要给locals:键变量。

     $("#like_form").html("<%= escape_javascript(render('microposts/unlike_grid', micropost: @micropost)) %>");
    

    【讨论】:

    • 同样的问题:问题似乎出在 _unlike_grid.html.erb 中,不在 .js.erb 中,也许我在控制器中的 @micropost 变量有误?
    猜你喜欢
    • 1970-01-01
    • 2012-12-07
    • 1970-01-01
    • 2011-09-10
    • 2018-09-02
    • 2016-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多