加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 在RailsAdmin中具有join_table和has_many:thr

发布时间:2020-12-17 02:33:17 所属栏目:百科 来源:网络整理
导读:所以我有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 这是我的产品.rb att
所以我有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

这是我的产品.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

这是我的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

这是我的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

当我在查看RailsAdmin时单击Categories时,出现此错误:

ActionController::RoutingError at /admin/category

Message No route matches {:action=>"show",:model_name=>"category_product",:id=>nil,:controller=>"rails_admin/main"}

当我点击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

RailsAdmin中的所有其他链接用于我的其他“普通”(即非HMT)模型.

可能是什么导致了这个?

谢谢.

编辑1

对于它的价值,这里是我点击Rails管理员内部的“类别”时的日志:

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

编辑2

这是一个错误的gist of the full trace.我正在使用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

类别

# == Schema Information
#
# Table name: categories
#
#  id         :integer          not null,primary key
#  name       :string(255)
#  created_at :datetime         not null
#  updated_at :datetime         not null

产品

# == 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)

请注意,CategoryProduct没有主键字段.这是问题吗?

解决方法

检查所有CategoryProduct对象是否有外键:category_id和product_id.

CategoryProduct.all.each {|c| raise("Repair #{c.id}") unless c.category && c.product}

12月21日更新:

我如何使用Category,Product和CategoryProduct安装全新的Rails 3.2.9.模型的关系代码是相同的,RailsAdmin具有默认设置.

它没有任何问题!

我决定测试我的假设.我想也许当你从HABTM转到HM2HM时,你错过了(忘了)重新建立CategoryProduct的关键列ID,现在这不仅仅是一个连接模型,而是一个独立的实体.

所以,路由错误如:

No route matches {:action=>"show",:controller=>"rails_admin/main"}

可能是缺少身份的结果.

我手动禁用了CategoryProduct的id字段(def id; nil; end).

是的它是:

No route matches {:action=>"show",:controller=>"rails_admin/main"}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读