在我的rails应用程序中,我在数据库中有三个模型/表(用户,注册人,事件)。当我遇到一个问题,说我找不到事件表时,我正在设置一些Capybara / RSpec测试。
现在事件模型工作正常,我已经能够创建事件,进入rails控制台并查询事件,例如Events.all或Events.find(1)。令我困惑的是我的架构。我的架构有
create_table "registrations", force: true do |t|
t.string "first_name"
...
end
create_table "users", force: true do |t|
t.string "email", default: "", null: false
...
end
但是没有对events表的引用。自从我为事件生成模型以来已经过了一段时间,但这里是迁移:
class CreateEvents < ActiveRecord::Migration
def change
create_table(:events) do |t|
t.string :name
t.string :location
t.timestamps
end
end
end
我已经运行了rake db:reset和rake db:migrate等命令,以确保我的所有迁移都是最新的。任何想法为什么事件表不在架构中?
更新 所以我删除了数据库和架构,并开始一次迁移一个迁移。当我运行迁移来创建它时,事件表就在那里,但是在我运行以下命令之后,表从模式中消失了:
class AddingAssociationsToEventsUserModels < ActiveRecord::Migration
def change
add_column :events, :belongs_to, :user, index: true
end
end
以下是正在运行的迁移:
rake db:migrate:redo VERSION=20150518132834
== 20150518132834 AddingAssociationsToEventsUserModels: migrating =============
-- add_column(:events, :belongs_to, :user, {:index=>true})
-> 0.0006s
== 20150518132834 AddingAssociationsToEventsUserModels: migrated (0.0006s) ====
答案 0 :(得分:3)
那是因为development
数据库和RAILS_ENV=test rake db:drop && rake db:create && rake db:migrate
数据库不匹配。
执行命令
RAILS_ENV=test rake db:test:prepare
或
RAILS_ENV=test rake db:reset
或
WHSWorkId id = 'LAM-000052';
WHSPickListShippingController controller;
Args args;
WHSShipmentTable whsShipmentTable;
WHSWorkTable whsWorkTable;
clWHSPickListShippingContract contract; //My custom RDP Contract
whsShipmentTable = WHSShipmentTable::find(whsWorkTable.ShipmentId);
args = new Args(ssrsReportStr(WHSPickListShipping, Report));
args.record(whsShipmentTable);
args.parm(whsShipmentTable.LoadId);
contract = new clWHSPickListShippingContract();
controller = new WHSPickListShippingController();
controller.parmReportName(ssrsReportStr(WHSPickListShipping, Report));
controller.parmShowDialog(false);
controller.parmLoadFromSysLastValue(false);
controller.parmReportContract().parmRdpContract(contract);
controller.parmReportContract().parmRdpName(classStr(clWHSPickListShippingDP));
controller.parmReportContract().parmRdlContract().parmLanguageId(CompanyInfo::languageId());
controller.parmArgs(args);
controller.startOperation();
上述任何一项都应该有效。
答案 1 :(得分:1)
好的,这个问题在我的迁移文件中是个错误。以下是我将迁移更改为:
class AddingAssociationsToEventsUserModels < ActiveRecord::Migration
def change
add_reference :events, :user, index: true
end
end
现在,事件表在我的架构中,测试可以找到该表并正在传递!