【发布时间】:2013-11-02 10:33:06
【问题描述】:
我有以下迁移和模型:
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>
【问题讨论】:
-
你确定你已经重新加载了环境和用户变量本身?例如,如果您在 Rails 控制台中有一个用户实例,运行迁移,更新用户模型然后重新加载控制台,它仍然无法工作,因为用户实例是由旧版本的类组成的,您需要创建一个新的(再次从数据库中获取)。如果它发生在您的开发服务器环境中,请提供更多上下文/详细信息。
-
重装控制台也是一个非常有可能的解决方案!
-
我在第一次迁移数据库后完成了。但以防万一我重新加载了控制台,问题仍然存在。没有更多的上下文,这是一个 Rails 空项目(rails 4.0.0 ruby 2.0.0)
-
对了,为什么会有一个字符串字段
platform_id? Rails 自动生成ids... -
你是对的TheChamp,但在这种情况下platform_id不是自己模型的id,而是社交网络(facebook_id,twitter_id等)提供的id 平台是社交网络和用户可能有多个社交网络与之关联。
标签: ruby-on-rails ruby model associations has-many