在我的项目中,用户拥有一家酒店,每家酒店都有与之相关的房型。简而言之,模型是
class User < ActiveRecord::Base
has_many :hotels
class Hotel < ActiveRecord::Base
belongs_to :user
has_many :roomtypes
class Roomtype < ActiveRecord::Base
attr_accessible :maxguests, :name
belongs_to :hotel
如果我执行命令:
@user = User.find(1)
@user.hotels.find(1).roomtypes.build(name: "something", maxguests: "2")
控制台返回:
#<Roomtype id: nil, name: "something", maxguests: 2, created_at: nil, updated_at: nil, hotel_id: 1>
出于某种原因,Roomtype id和时间戳为零。有什么想法吗?
答案 0 :(得分:7)
您已经构建了roomtype(它创建了一个新的对象实例),但您还没有保存它。你必须明确保存房间类型才能进入数据库(从而得到一个id)。
而不是build
使用create
或create!
通过单个方法调用来完成此操作
答案 1 :(得分:3)
将build
替换为create
,您将拥有带ID和时间戳的持久对象。
之前没有意义。