Rails:通过partial将实例变量传递给不同的控制器

时间:2013-09-03 11:41:20

标签: ruby-on-rails ajax partials

在分类视图中,我有:

<ul>
  <% @category.subcategories.each do |subcategory| %>
    <li>
      <h6>
        <%if subcategory.has_topic_headings? %>
          <%= link_to subcategory.name, { controller: 'subcategories', 
                                          action: 'show_topic_headings',
                                          category_id: subcategory.category_id,
                                          id: subcategory.id 
                                        }, data: 'topic_heading_link', 
                                        remote: true %>
        <% else %>
          <%= link_to subcategory.name, subcategory %>
        <% end %>  
      </h6>
      <hr>
    </li>
  <% end %> 
</ul>            

在application.js中:

/* slides in the subcategory menu or the content */
$('.category-menu a').on(
'click',
function(e) {
  if ($(this).attr('data')) {
    /* make submenu visible */
    $('.stretched.nav.row > .slider').animate({left:'-62.5em'});
    e.preventDefault();
  }
  else {
    /* make content visible */
    $('.stretched.main.row > .slider').animate({left:'-62.5em'});
    e.preventDefault();
  }
}
);

在subcategories_controller.rb

  def show_topic_headings
    respond_to :js
    @subcategory = Subcategory.find(params[:id])
  end

在子类别/ show_topic_heading中我有:

$('.subcategory-menu').html( "<%= escape_javascript( render( partial: "layouts/topic_headings", locals: { subcategory: @subcategory} ) ) %>" );

单击活动链接,.subcategory-menu应填充正确的内容,并且div应包含滑入。但内容仅在静态时出现(例如,如果我放置字符串而不是引用@subcategory)。请注意,我在其中插入子类别partial的视图是类别视图。

1 个答案:

答案 0 :(得分:1)

问题在于subcategories_controller:

respond_to,而不是函数本身,生成部分。因此,需要在调用respond_to

之前声明实例变量
def show_topic_headings
  @subcategory = Subcategory.find(params[:id])
  respond_to :js
end