Rails 帮助查找当前路径
Rails helper to find the current path
我正在尝试制作一个帮助程序,将 Bootstrap "active" class 添加到浏览器当前页面的导航选项卡。问题是我有类别及其子类别,所以当当前页面是该类别的子类别时,我希望类别选项卡也处于活动状态。
这个有效:
def active?(category)
"active" if current_page?(category_path(category) || category_subcategory_path(category, 1))
end
但是如您所见,我对子类别 id - 1 进行了硬编码(只是为了测试它是否有效)。我以为我可以传递 category.subcategory
而不是 1,但后来我得到 undefined subcategory for category with id 1 因为我的类别 table 没有任何对子类别的引用(只有子类别 table 有一个 category_id 行),所以我想我应该在类别控制器中以某种方式定义子类别,但是如何定义?
也曾想过抓取 URI 的最后一段 (http://localhost:3000/categories/2/subcategories/5),但它看起来不是一个方便的方法。
<% @categories.each do |cat| %>
<li class="<%= active?(cat) %>">
<%= link_to cat.name.titleize, category_path(cat) %></td>
</li>
<% end %>
<% @category.subcategories.each do |subcategory| %>
<li>
<%= link_to subcategory.name.titleize, category_subcategory_path(@category, subcategory) %></td>
</li>
<% end %>
将以下方法添加到您的 Category
模型中:
def has_child?(subcat)
subcategories.include?(subcat) # probably better to match against ids
end
如果特定类别记录具有传入的 subcategory
,此方法将 return true
。
在您的 SubcategoriesHelper
中添加以下方法:
def category_class(cat, subcat)
cat.has_child?(subcat) ? 'active' : ''
end
这将 return "active"
如果 has_child?
为真
现在您可以在遍历 Category
记录时在 subcategories#show
视图中使用这个 category_class
辅助方法:
...
<% @categories.each do |cat| %>
<li class="<%= category_class(cat, @subcategory) %>">
<%= cat.title %>
</li>
<% end %>
...
解决方法:
def active?(category)
"active" if
current_page?(category_path(category)) ||
current_page?(category_subcategory_path(controller: 'subcategories', action: 'show', category_id: category))
end
我正在尝试制作一个帮助程序,将 Bootstrap "active" class 添加到浏览器当前页面的导航选项卡。问题是我有类别及其子类别,所以当当前页面是该类别的子类别时,我希望类别选项卡也处于活动状态。
这个有效:
def active?(category)
"active" if current_page?(category_path(category) || category_subcategory_path(category, 1))
end
但是如您所见,我对子类别 id - 1 进行了硬编码(只是为了测试它是否有效)。我以为我可以传递 category.subcategory
而不是 1,但后来我得到 undefined subcategory for category with id 1 因为我的类别 table 没有任何对子类别的引用(只有子类别 table 有一个 category_id 行),所以我想我应该在类别控制器中以某种方式定义子类别,但是如何定义?
也曾想过抓取 URI 的最后一段 (http://localhost:3000/categories/2/subcategories/5),但它看起来不是一个方便的方法。
<% @categories.each do |cat| %>
<li class="<%= active?(cat) %>">
<%= link_to cat.name.titleize, category_path(cat) %></td>
</li>
<% end %>
<% @category.subcategories.each do |subcategory| %>
<li>
<%= link_to subcategory.name.titleize, category_subcategory_path(@category, subcategory) %></td>
</li>
<% end %>
将以下方法添加到您的 Category
模型中:
def has_child?(subcat)
subcategories.include?(subcat) # probably better to match against ids
end
如果特定类别记录具有传入的 subcategory
,此方法将 return true
。
在您的 SubcategoriesHelper
中添加以下方法:
def category_class(cat, subcat)
cat.has_child?(subcat) ? 'active' : ''
end
这将 return "active"
如果 has_child?
为真
现在您可以在遍历 Category
记录时在 subcategories#show
视图中使用这个 category_class
辅助方法:
...
<% @categories.each do |cat| %>
<li class="<%= category_class(cat, @subcategory) %>">
<%= cat.title %>
</li>
<% end %>
...
解决方法:
def active?(category)
"active" if
current_page?(category_path(category)) ||
current_page?(category_subcategory_path(controller: 'subcategories', action: 'show', category_id: category))
end