自从我在Rails工作以来已经有一段时间了,我在设置路线时遇到了一些问题。任何帮助将不胜感激。
URL: http://localhost:3000/admin/products/new
Error: undefined method `products_path' for #<#<Class:0x007f9f569d0150>:0x007f9f578ccb18>
rake routes
admin_products GET /admin/products(.:format) admin/products#index
POST /admin/products(.:format) admin/products#create
new_admin_product GET /admin/products/new(.:format) admin/products#new
edit_admin_product GET /admin/products/:id/edit(.:format) admin/products#edit
admin_product GET /admin/products/:id(.:format) admin/products#show
PUT /admin/products/:id(.:format) admin/products#update
DELETE /admin/products/:id(.:format) admin/products#destroy
的routes.rb
Aneprize::Application.routes.draw do
devise_for :admins, :users
namespace :admin do
match '/', to: 'dashboard#index', as: '/'
authenticated :admin do
root to: 'dashboard#index', as: :root
resources :products do
resource :contest
resources :bids
resources :photos
resources :tags
end
end
end
root to: 'contests#index'
end
product.rb
class Product < ActiveRecord::Base
attr_accessible :name, :retail_price, :short_description, :long_description, :weight
has_one :contest, dependent: :destroy
has_many :photos, dependent: :destroy
has_many :bids, dependent: :destroy
has_many :tags
validates :name, :short_description, :long_description, presence: true
validates :retail_price, presence: true, numericality: { only_integer: true, greater_than_or_equal_to: 0 }
validates :weight, presence: true, numericality: { only_integer: true, greater_than_or_equal_to: 1 }
end
contest.rb
class Contest < ActiveRecord::Base
attr_accessible :product_id, :duration
belongs_to :product, dependent: :destroy
validates :product_id, presence: true, numericality: { only_integer: true, greater_than: 0 }
validates :duration, presence: true, numericality: { only_integer: true, greater_than: 2 }
end
product.rb
class Photo < ActiveRecord::Base
attr_accessible :product_id, :image_url
belongs_to :product
validates :product_id, presence: true, numericality: { only_integer: true, greater_than: 0 }
validates :image_url, presence: true, format: { with: /^[^-\d].+/ }
end
bid.rb
class Bid < ActiveRecord::Base
attr_accessible :product_id, :account_id, :amount
belongs_to :account
belongs_to :product, dependent: :destroy
validates :account_id, :product_id, :amount, presence: true, numericality: { only_integer: true, greater_than: 0 }
end
tag.rb
class Tag < ActiveRecord::Base
attr_accessible :name, :product_id
belongs_to :product
validates :name, presence: true, format: { with: /^\D+$/ }
validates :product_id, presence: true, numericality: { only_integer: true, greater_than: 0 }
end
答案 0 :(得分:3)
由于您在URL: http://localhost:3000/admin/products/new
收到错误,因此您的表单构建器应该遇到一些问题。
虽然您在:admin
命名空间中拥有产品资源,但在构建表单时应考虑到这一事实。正确的例子是:
<%= form_for [:admin, @product] do |f| %>
... # whatever
<% end %>
而不仅仅是
<%= form_for @product do |f| %>
... # whatever
<% end %>
答案 1 :(得分:0)
您新模板中的某个地方正在调用products_path
。由于它位于管理员之下,因此您应将其更改为admin_products_path