Question

In Category view I have:

<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>            

In 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();
  }
}
);

In subcategories_controller.rb

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

And in subcategories/show_topic_heading I have:

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

Clicking on the active link, .subcategory-menu should be populated with the correct content and the div containing should slide in. But the content only appears if it's static (for example, if I put a string instead of a reference to @subcategory). Please note that the view in which I am inserting the subcategory partial is a category view.

Was it helpful?

Solution

The problem lies in the subcategories_controller:

respond_to, not the function itself, generates the partial. Therefore the instance variable needs to be declared before calling respond_to

def show_topic_headings
  @subcategory = Subcategory.find(params[:id])
  respond_to :js
end
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top