我有以下路线:
resources :categories do
resources :subcategories
end
看起来像这样(来自rake routes
):
category GET /categories/:id(.:format) categories#show
以下行动:
class CategoriesController < ApplicationController
def index
@categories = Category.all
@campus = @categories[0]
@community = @categories[1]
@housing = @categories[2]
@h2f = @categories[3]
@free = @categories[4]
@jobs = @categories[5]
@talent = @categories[6]
@personals = @categories[7]
@sale = @categories[8]
@services = @categories[9]
@unboxing = @categories[10]
end
def show
@listings = Listing.where(category_id: params[:id]).order("created_at DESC")
@category = Category.find(params[:id])
end
end
我正在尝试链接到搜索页面上类别的每个类别(路径为/listings/search
)。
我尝试了<%= link_to 'Sale', @listing.categories_path(@sale) %>
和<%= link_to 'Sale', category_path(@sale) %>
,但没有任何效果。
答案 0 :(得分:0)
我假设您需要指向其中一个类别(Category#show
)的链接,然后<%=link_to 'Sale', category_path(@sale)%>
本身是正确的,但您需要实例化@sale。因此,假设您要列出所有类别,并且您的类别具有属性name
,您可以执行类似
<%@categories.each do |c|%>
<%=link_to "#{c.name}", category_path(c)%>
<%end%>
如果你只想要索引页面,它应该是categories_path
,没有任何参数。
答案 1 :(得分:0)
(根据您发布的链接)看起来似乎是尝试在ListingsController
操作的网页上添加这些链接,特别是listings#search
,而不是category#show
我猜你正在做的路线看起来像这样:
resources :listings do
member do
get 'search' => 'listings#search'
end
end
class ListingsController
def search
@matching_listings = Listings.something
end
end
当您访问listings
控制器search
路由时,将不会执行其他控制器或控制器操作。因此,您添加到CategoriesController#index
的代码将无法运行。
如果您要加载网站上其他操作的类别列表,例如categories#show
或listings#search
,则必须在特定操作方法中加载它们:
class ListingsController
def search
@matching_listings = Listings.something
@categories = Categories.order(:name)
end
end
<ul class='categories'>
<% @categories.each do |category| %>
<li><%= link_to(category.name, category_path(category)) %></li>
<% end %>
</ul>
然而,这非常糟糕,因为您必须将其复制并粘贴到许多不同的操作中。
更好的方法是添加视图助手方法。通常你会在你想要添加它的特定控制器的帮助器中执行此操作,并且我将给出该示例。但您可以将其放在ApplicationHelper
中,以便所有控制器中的模板都可以使用它。
module ListingsHelper
def all_categories
Category.order(:name)
end
end
class ListingsController
def search
@matching_listings = Listings.something
end
end
<ul class='categories'>
<% all_categories.each do |category| %>
<li><%= link_to(category.name, category_path(category)) %></li>
<% end %>
</ul>
最后,我想提一下,加载类别列表的方式是非常糟糕。您没有指定排序顺序,因此可以按任何顺序返回类别记录。我的例子是为了让他们不依赖于特定顺序的记录而构建的,因为我遍历记录数组。如果您不希望它们按字母顺序排列,您应该将一个整数列添加到您可以排序的categories
表中,以便您可以通过更改这些值来控制顺序。