【问题标题】:Custom string primary key自定义字符串主键
【发布时间】:2014-04-15 13:38:36
【问题描述】:

我想用字符串主键创建表。

Product_Category 型号:

class Product_Category < ActiveRecord::Base
  self.primary_key = "product_category_name"
  self.table_name = "product_category"

  belongs_to :shop_category

  validates :product_category_name, uniqueness: true
end

迁移:

class CreateProductCategory < ActiveRecord::Migration
  def change
    create_table :product_category, id:  false  do |t|
      t.string :product_category_name, null: false
      t.string :shop_category_id
      t.boolean :disable_product_category
    end
    execute "ALTER TABLE 'product_category' ADD PRIMARY KEY ('product_category_name')"
  end
end

但在 rake db:migrate 我收到:

rake db:migrate
?==  CreateProductCategory: migrating ==========================================
-- create_table(:product_category, {:id=>false})
   -> 0.0381s
-- execute("ALTER TABLE 'product_category' ADD PRIMARY KEY ('product_category_name')")
rake aborted!

An error has occurred, this and all later migrations canceled:

SQLite3::SQLException: near "PRIMARY": syntax error: ALTER TABLE 'product_category' ADD PRIMARY KEY ('product_category_name')E:/androcommerce/admin_backend/db/migrate/20140414145913_create_product_category.rb:8:in `change'

C:in `migrate'

Tasks: TOP => db:migrate
(See full trace by running task with --trace)

我不明白为什么。语法正确。

【问题讨论】:

标签: ruby-on-rails ruby-on-rails-4


【解决方案1】:

试试这个:

execute "ALTER TABLE product_category ADD PRIMARY KEY (product_category_name);"

编辑:让我们尝试另一种方法。只需在创建表选项中设置主键并放弃执行命令。

 {
    :id => false,
    :primary_key  => :product_category_name
 }

如果您有任何与 ProductCategory 相关的关联,请将外键设置为 product_category_name。示例:

belongs_to :product_category, foreign_key: product_category_name

【讨论】:

  • 你的意思是没有撇号吗?谢谢,但它不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-08
  • 2015-01-11
  • 2022-07-08
  • 2012-07-19
  • 2019-06-02
  • 1970-01-01
  • 2017-11-27
相关资源
最近更新 更多