0

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.

1 Answer 1

1

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
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.