在ActiveRecord的belongs_to关联中,id并不总是设置,这通常是因为关联的对象没有被加载或创建。
下面是一个解决方法的代码示例:
class Order < ApplicationRecord
belongs_to :user
end
class User < ApplicationRecord
has_many :orders
end
# 获取订单的用户ID
order = Order.first
user_id = order.user_id # 这里的user_id可能为nil
# 确保关联对象被加载
order = Order.includes(:user).first
user_id = order.user_id # 这里的user_id不会为nil
# 创建订单时设置关联的用户
user = User.first
order = Order.new(user: user)
order.save!
user_id = order.user_id # 这里的user_id不会为nil
在上面的示例中,我们使用了includes方法来确保关联的对象被加载,这样就可以避免关联对象的id为nil的情况。
另外,当创建一个新的订单时,我们可以通过将关联的用户传递给Order.new方法来设置关联对象的id。