Ruby on Rails - 将变量传递给部分内部的部分

dia*_*ks2 8 ruby ruby-on-rails partial-views ruby-on-rails-3

我通过:collection选项将一个集合(@feed_items)传递给_feed_item部分.在_feed_item部分内部,我想渲染另一个部分_like_button.在_like_button partial中,我希望能够访问集合的特定成员.我应该从_feed_item部分传递到_like_button部分?

 @feed_items = current_user.user_feed.order("id DESC").limit(5)
Run Code Online (Sandbox Code Playgroud)

_feed.html.erb

 <%= render partial: 'shared/feed_item', collection: @feed_items %>
Run Code Online (Sandbox Code Playgroud)

_feed_item.html.erb

 <%= render 'likes/like_button', ????? %>
Run Code Online (Sandbox Code Playgroud)

_like_button.html.erb

 <% if like = current_user.likes.find_by_feed_id(feed_item.id) %>
Run Code Online (Sandbox Code Playgroud)

编辑

根据以下答案传递局部变量:

 <%= render :partial => 'likes/like_button', :locals =>{:feed_item => feed_item} %>
Run Code Online (Sandbox Code Playgroud)

但是,在提交之后,我正在ActionView::Template::Error (undefined local variable or method 'feed_item'尝试通过ajax再次呈现表单.如何通过ajax调用再次传递局部变量?

调节器

class LikesController < ApplicationController
  def create
    @like = Like.create(params[:like])
    @feed = @like.feed
    render :toggle
  end

  def destroy
    like = Like.find(params[:id]).destroy
    @feed = like.feed
    render :toggle
  end
end
Run Code Online (Sandbox Code Playgroud)

toggle.js.erb

 $("#like").html("<%= escape_javascript render('like_button') %>");
Run Code Online (Sandbox Code Playgroud)

_like_button.html.erb

 <% if like = current_user.likes.find_by_feed_id(feed_item.id) %>
  <%= form_for like, :html => { :method => :delete }, :remote => true do |f| %>
    <%= f.submit "Unlike" %>
  <% end %>
 <% else %>
  <%= form_for current_user.likes.build(:feed_id => feed_item.id), :remote => true do |f| %>
   <%= f.hidden_field :feed_id %>
   <%= f.hidden_field :user_id %>
   <%= f.submit "Like" %>
  <% end %>
 <% end %>
Run Code Online (Sandbox Code Playgroud)

_feed_item.html.erb

    <div id="like">
      <%= render :partial => 'likes/like_button', :locals =>{:feed_item => feed_item} %>
    </div>
Run Code Online (Sandbox Code Playgroud)

Pri*_*ain 7

 <%= render :partial => 'likes/like_button', :locals =>{:feed_item => feed_item} %>
Run Code Online (Sandbox Code Playgroud)

Rails有一些很棒的文档http://guides.rubyonrails.org/layouts_and_rendering.html#passing-local-variables

在toggle.js中

 $("#like").html("<%= escape_javascript(render :partial => 'likes/like_button', :locals =>{:feed_item => @feed}) %>");
Run Code Online (Sandbox Code Playgroud)