Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 没有路由匹配{:action=>;show";,:controller=>;categories";,:url=>;},缺少必需的键:[:url]_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 没有路由匹配{:action=>;show";,:controller=>;categories";,:url=>;},缺少必需的键:[:url]

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

我对rails有点陌生。所以我想做一个craigslist的克隆人。到目前为止,我已经实现了所有类别和子类别。我在尝试搜索我的url链接时遇到了这个错误,因此它可能像craigslist克隆/c/community/activities/3,其中“community”是父类别,“activities”是子类别,因此“3”是发布的帖子

现在,我可以点击每一个父类错误更少。我唯一一次出现错误是在单击子类别时,错误如下所示:

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
中将其定义为单独的路由。