mar*_*ion 5 ruby-on-rails ruby-on-rails-3 rails-admin
所以,我有3种型号:category,product,category_products。
这是我的 category.rb
attr_accessible :name
has_many :category_products do
def with_products
includes(:product)
end
end
has_many :products, :through => :category_products
Run Code Online (Sandbox Code Playgroud)
这是我的 product.rb
attr_accessible :name, :description, :price, :vendor_id, :image, :category_ids
belongs_to :vendor
has_many :category_products do
def with_categories
includes(:category)
end
end
has_many :categories, :through => :category_products
Run Code Online (Sandbox Code Playgroud)
这是我的 category_product.rb
attr_accessible :product_id, :category_id, :purchases_count
belongs_to :product
belongs_to :category
validates_uniqueness_of :product_id, :scope => :category_id
Run Code Online (Sandbox Code Playgroud)
这是我的 routes.rb
mount RailsAdmin::Engine => '/admin', :as => 'rails_admin'
resources :categories
resources :vendors do
resources :products
end
authenticated :user do
root :to => 'home#index'
end
root :to => "home#index"
devise_for :users
resources :users
Run Code Online (Sandbox Code Playgroud)
当我在Categories查看RailsAdmin时单击时,出现此错误:
ActionController::RoutingError at /admin/category
Message No route matches {:action=>"show", :model_name=>"category_product", :id=>nil, :controller=>"rails_admin/main"}
Run Code Online (Sandbox Code Playgroud)
当我单击时,我也会收到此错误 Category Products
ActiveRecord::StatementInvalid at /admin/category_product
Message SQLite3::SQLException: no such column: category_products.desc: SELECT "category_products".* FROM "category_products" ORDER BY category_products. desc LIMIT 20 OFFSET 0
Run Code Online (Sandbox Code Playgroud)
我的其他“正常”(即非HMT)模型在RailsAdmin中的所有其他链接都可以使用。
是什么原因造成的?
谢谢。
编辑1
对于它的价值,这是当我单击Rails Admin内部的“类别”时的日志:
CodeRay::Scanners could not load plugin nil; falling back to :text
CodeRay::Scanners could not load plugin nil; falling back to :text
Started GET "/admin/category?_pjax=%5Bdata-pjax-container%5D" for 127.0.0.1 at 2012-12-20 22:23:38 -0500
Processing by RailsAdmin::MainController#index as HTML
Parameters: {"_pjax"=>"[data-pjax-container]", "model_name"=>"category"}
Category Load (0.3ms) SELECT "categories".* FROM "categories" LIMIT 6
User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
Category Load (0.2ms) SELECT "categories".* FROM "categories" ORDER BY categories.id desc LIMIT 20 OFFSET 0
CategoryProduct Load (0.2ms) SELECT "category_products".* FROM "category_products" WHERE "category_products"."category_id" = 2
Rendered /.rvm/gems/ruby-1.9.3-p194@apt-605/gems/rails_admin-0.3.0/app/views/rails_admin/main/index.html.haml within layouts/rails_admin/pjax (29.4ms)
Completed 500 Internal Server Error in 43ms
CodeRay::Scanners could not load plugin nil; falling back to :text
CodeRay::Scanners could not load plugin nil; falling back to :text
Started GET "/admin/category" for 127.0.0.1 at 2012-12-20 22:23:40 -0500
Processing by RailsAdmin::MainController#index as HTML
Parameters: {"model_name"=>"category"}
Category Load (0.3ms) SELECT "categories".* FROM "categories" LIMIT 6
User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
Category Load (0.2ms) SELECT "categories".* FROM "categories" ORDER BY categories.id desc LIMIT 20 OFFSET 0
CategoryProduct Load (0.2ms) SELECT "category_products".* FROM "category_products" WHERE "category_products"."category_id" = 2
Rendered /.rvm/gems/ruby-1.9.3-p194@apt-605/gems/rails_admin-0.3.0/app/views/rails_admin/main/index.html.haml within layouts/rails_admin/application (30.5ms)
Completed 500 Internal Server Error in 251ms
Run Code Online (Sandbox Code Playgroud)
编辑2
这是错误的全部踪迹的要点。我正在使用gem Better_errors宝石,因此跟踪看起来不像标准的Rails跟踪错误。但是数据是一样的。
编辑3
这是我的3个模型的架构:
CategoryProducts
# == Schema Information
#
# Table name: category_products
#
# product_id :integer
# category_id :integer
# purchases_count :integer default(0)
# created_at :datetime not null
# updated_at :datetime not null
Run Code Online (Sandbox Code Playgroud)
Category
# == Schema Information
#
# Table name: categories
#
# id :integer not null, primary key
# name :string(255)
# created_at :datetime not null
# updated_at :datetime not null
Run Code Online (Sandbox Code Playgroud)
Product
# == Schema Information
#
# Table name: products
#
# id :integer not null, primary key
# name :string(255)
# description :string(255)
# price :float
# vendor_id :integer
# created_at :datetime not null
# updated_at :datetime not null
# image :string(255)
Run Code Online (Sandbox Code Playgroud)
请注意,CategoryProduct它没有主键字段。那是问题吗?
检查所有 CategoryProduct 对象都有外键:category_id 和 Product_id。
CategoryProduct.all.each {|c| raise("Repair #{c.id}") unless c.category && c.product}
Run Code Online (Sandbox Code Playgroud)
12月21日更新:
我如何安装全新的 Rails 3.2.9 以及类别、产品和类别产品。模型的关系代码是相同的,RailsAdmin 使用默认设置。
而且它的工作没有任何问题!
我决定检验我的假设。我想也许当您从 HABTM 转到 HM2HM 时,您错过了(忘记)为 CategoryProduct 重新建立关键列 ID,它现在不仅仅是一个连接模型,而是一个独立的实体。
因此,路由错误如下:
No route matches {:action=>"show", :model_name=>"category_product", :id=>nil, :controller=>"rails_admin/main"}
Run Code Online (Sandbox Code Playgroud)
可能是缺少 id的结果。
好吧,我手动禁用了 CategoryProduct 的 id 字段(def id; nil; end)。
是的,它是:
No route matches {:action=>"show", :model_name=>"category_product", :id=>nil, :controller=>"rails_admin/main"}
Run Code Online (Sandbox Code Playgroud)