Ruby on rails Rails-有许多关系导致命名错误
我有以下迁移和模型:Ruby on rails Rails-有许多关系导致命名错误,ruby-on-rails,ruby,model,associations,has-many,Ruby On Rails,Ruby,Model,Associations,Has Many,我有以下迁移和模型: class CreatePlatforms < ActiveRecord::Migration def change create_table :platforms do |t| t.integer :user_id t.string :name t.string :platform_id t.timestamps end end end class CreateUsers &
class CreatePlatforms < ActiveRecord::Migration
def change
create_table :platforms do |t|
t.integer :user_id
t.string :name
t.string :platform_id
t.timestamps
end
end
end
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string :email
t.string :first_name
t.string :last_name
t.string :gender
t.date :birthday
t.timestamps
end
end
end
class Platform < ActiveRecord::Base
belongs_to :user
end
class User < ActiveRecord::Base
attr_accessible :email, :first_name, :last_name, :gender, :birthday
has_many :platforms
end
甚至我也可以将用户与平台关联:
user = User.new
platform1 = Platform.new
platform2 = Platform.new
platform1.user = user
但当我试图将平台与用户关联或从用户那里获取平台时,它崩溃了:
user.platforms << user or user.platforms
NoMethodError: undefined method `platforms' for #<User:0x007f8cfd47a770>
user.platforms事实证明,问题在于数据库字段platform\u id
。这弄乱了轨道。只需删除它,它就会工作。您确定已重新加载环境和用户变量本身吗?例如,如果您在Rails控制台中有一个用户实例,运行迁移,更新用户模型,然后重新加载控制台,它仍然无法工作,因为用户实例是由类的旧版本组成的,您需要创建一个新实例(再次从DB获取)。如果它发生在您的dev服务器环境中,请提供更多上下文/详细信息。重新加载控制台也是一个非常可能的解决方案!我是在第一次迁移数据库之后完成的。但万一我重新加载了控制台,问题仍然存在。这里没有更多的上下文,这是一个rails空项目(rails 4.0.0 ruby 2.0.0),顺便问一下,为什么有一个字符串字段platform\u id
?Rails会自动生成id
,你说得对,但在这种情况下,平台id不是自己模型的id,而是社交网络提供的id(facebook、twitter等)平台是一个社交网络,用户可以有多个社交网络与之关联。这很奇怪,因为我重新加载了控制台,问题依然存在。你是怎么做到的?复制/粘贴我的代码?能否成功保存用户和平台?以及一个简单的重新加载代码>不行,你必须退出,然后重新打开。我已经关闭并重新打开了控制台,这不是问题所在。我已尝试保存所有实例,但没有更好的结果。我注意到,当我按下制表键时,控制台不会为我自动完成用户的“平台”字段(即:user.plat),因此我认为用户模型中的平台属性有问题,可以吗?。只是为了确保您没有搞乱变量:user.first.platforms
失败?