Ruby on rails 没有路由匹配{:action=>;show";,:controller=>;categories";,:url=>;},缺少必需的键:[:url]
我对rails有点陌生。所以我想做一个craigslist的克隆人。到目前为止,我已经实现了所有类别和子类别。我在尝试搜索我的url链接时遇到了这个错误,因此它可能像craigslist克隆/c/community/activities/3,其中“community”是父类别,“activities”是子类别,因此“3”是发布的帖子 现在,我可以点击每一个父类错误更少。我唯一一次出现错误是在单击子类别时,错误如下所示:Ruby on rails 没有路由匹配{:action=>;show";,:controller=>;categories";,:url=>;},缺少必需的键:[:url],ruby-on-rails,ruby,Ruby On Rails,Ruby,我对rails有点陌生。所以我想做一个craigslist的克隆人。到目前为止,我已经实现了所有类别和子类别。我在尝试搜索我的url链接时遇到了这个错误,因此它可能像craigslist克隆/c/community/activities/3,其中“community”是父类别,“activities”是子类别,因此“3”是发布的帖子 现在,我可以点击每一个父类错误更少。我唯一一次出现错误是在单击子类别时,错误如下所示: No route matches {:action=>"sh
No route matches {:action=>"show", :controller=>"categories", :url=>""}, missing required keys: [:url]
<% category.subcategories.limit(10).each do |subcategory| %>
<div class= "subcat"><%= link_to subcategory.name, show_category_path(subcategory.url) %></div>
<%end%>
</div>
my category.rb模型:
class Category < ApplicationRecord
belongs_to :parent, class_name:"Category", optional: true
has_many :subcategories, class_name:"Category", foreign_key: :parent_id, dependent: :destroy
has_many :posts
end
我只是觉得我已经走到了死胡同,任何帮助或任何建议的资源,我可能需要阅读,以能够克服这个问题是高度赞赏的。谢谢大家! 你们中的一个
子类别
似乎有一个空白URL
<% category.subcategories.limit(10).each do |subcategory| %>
<% next if subcategory.url.blank? %>
<div class= "subcat"><%= link_to subcategory.name, show_category_path(subcategory.url) %></div>
<% end %>
您定义了如下自定义路线:
get "c/:url" => "categories#show", as: :show_category
show_category_path(url: category.url)
resources :categories, path: "c", only: :show, param: :url
因此,您需要显式地将url
键传递给route方法,如下所示:
get "c/:url" => "categories#show", as: :show_category
show_category_path(url: category.url)
resources :categories, path: "c", only: :show, param: :url
或者,您也可以不使用。换句话说,您可以使用以下内容定义路由:
get "c/:url" => "categories#show", as: :show_category
show_category_path(url: category.url)
resources :categories, path: "c", only: :show, param: :url
这将生成以下路由,您的原始代码可以很好地使用它:
category GET /c/:url(.:format) categories#show
因此,我以前也遇到过此类问题,您可能希望使用
:path
选项更改资源
路线,这可能会有所帮助
devise_for :accounts
resources :posts
resources :categories, path: "c", except:[:show] do
get "/:url" => "categories#show", as: :show_category
end
post "message/send" => "public#send_enquiry_to_user", as: :send_enquiry
get "/scams" => "public#scams", as: :scams
get "/terms" => "public#terms", as: :terms
get "/safety" => "public#safety", as: :safety
get "/faqs" => "public#faqs", as: :faqs
devise_scope :account do
get "/accounts/sign_out" => "devise/sessions#destroy"
end
root to: "public#home"
end
或者你也可以直接将
:url
传递给你的路线助手,比如显示类别路径(url:category.url)
现在,在我粘贴了这段代码之后,我在我的主页中似乎看不到任何子类别。我只看到父类别@ErvalhouSI在我的问题中附加了categoryModel和category Table,因此我显式地将url键传递给route方法,但我似乎仍然无法在任何子类别上单击无错误。当我点击一个子类别时,“/community/activities/3”我需要生成一个新的路由吗?@haithamaryan你是因为你的子类别而得到这个错误的吗?url==nil
?您既没有共享代码,也没有共享数据,所以我只是猜测可能出现的错误。如果您希望子类别URL使用不同的路由(可能有不同的行为?),那么是的,您需要在config/routes.rb
中将其定义为单独的路由。