我有一些问题。我是RoR的新手
我尝试使用Rails迁移创建连接表。这方面的文件是...... http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/SchemaStatements.html#method-i-create_join_table
当我这样做时......
rails g migration CreateJoinTableUserOffer users offers
...它会创建以下迁移
class CreateJoinTableUserOffer < ActiveRecord::Migration
def change
create_join_table:users, :offers do |t|
t.index [:user_id, :offer_id]
t.index [:offer_id, :user_id]
end
end
end
当我这样做的时候......
rake db:migrate
它创造了......
-- Table: offers_users
-- DROP TABLE offers_users;
CREATE TABLE offers_users
(
user_id integer NOT NULL,
offer_id integer NOT NULL
)
WITH (
OIDS=FALSE
);
ALTER TABLE offers_users
OWNER TO sudeepkaushik;
-- Index: index_offers_users_on_offer_id_and_user_id
-- DROP INDEX index_offers_users_on_offer_id_and_user_id;
CREATE INDEX index_offers_users_on_offer_id_and_user_id
ON offers_users
USING btree
(offer_id, user_id);
-- Index: index_offers_users_on_user_id_and_offer_id
-- DROP INDEX index_offers_users_on_user_id_and_offer_id;
CREATE INDEX index_offers_users_on_user_id_and_offer_id
ON offers_users
USING btree
(user_id, offer_id);
我想要做的是我首先要求表名为users_offers而不是offers_users,为此您可以在create_join_table迁移中指定:table_name。我无法正确设置此选项的语法。需要帮助!
第二,我注意到这次迁移并没有创建我期望用户和优惠表的外键。这里也需要你的评论。我是否需要自己手动创建外键?
答案 0 :(得分:3)
您可以使用table_name
选项定义联接表名称。
create_join_table :users, :offers, table_name: :users_offers
还有一个选项可以设置名为column_options
的列选项,但我只能使用它来处理索引而不是外键。
create_join_table :users, :offers, column_options: { index: true }
这将创建所需的索引,但忽略foreign_key: true
。所以你需要单独创建它们。
add_foreign_key :users_offers, :users
add_foreign_key :users_offers, :offers
在您的模型中,您需要添加如下关系:
# user.rb
has_and_belongs_to_many :offers, join_table: :users_offers
和
# offers.rb
has_and_belongs_to_many :users, join_table: :users_offers