Rails: attr_accessor 协会
Rails: attr_accessor association
你好,我是 rails 的初学者。
我有两个模型 UserSubscriptions
和 SubscriptionPlan
。
user_subscription.rb
class UserSubscription < ApplicationRecord
attr_accessor :new_plan_id
belongs_to :subscription_plan
belongs_to :new_plan_id, class_name: 'SubscriptionPlan', foreign_key: :new_plan_id
end
subscription_plan.rb
class SubscriptionPlan < ApplicationRecord
has_many :user_subscriptions
end
我想获取 new_plan
作为 subscription_plan
模型的对象。我仍然无法得到这个。请帮助。
提前致谢。
您绝对不想在 Rails 个模型中使用 attr_accessor
。*
attr_accessor
用于普通旧的 ruby 对象来生成实例变量的访问器方法。如果您在 Rails 模型中使用 attr_accessor
,您将破坏它通过读取数据库模式创建的 setter 和 getter。
结果是当你保存时属性不会被持久化。这是因为属性没有存储在属性散列中,也没有标记为脏。它也不会包含在任何使用属性 api 的方法中,例如 #attributes
或 #to_json
.
它也会破坏关联。
class UserSubscription < ApplicationRecord
belongs_to :subscription_plan
belongs_to :new_plan, class_name: 'SubscriptionPlan'
end
你好,我是 rails 的初学者。
我有两个模型 UserSubscriptions
和 SubscriptionPlan
。
user_subscription.rb
class UserSubscription < ApplicationRecord
attr_accessor :new_plan_id
belongs_to :subscription_plan
belongs_to :new_plan_id, class_name: 'SubscriptionPlan', foreign_key: :new_plan_id
end
subscription_plan.rb
class SubscriptionPlan < ApplicationRecord
has_many :user_subscriptions
end
我想获取 new_plan
作为 subscription_plan
模型的对象。我仍然无法得到这个。请帮助。
提前致谢。
您绝对不想在 Rails 个模型中使用 attr_accessor
。*
attr_accessor
用于普通旧的 ruby 对象来生成实例变量的访问器方法。如果您在 Rails 模型中使用 attr_accessor
,您将破坏它通过读取数据库模式创建的 setter 和 getter。
结果是当你保存时属性不会被持久化。这是因为属性没有存储在属性散列中,也没有标记为脏。它也不会包含在任何使用属性 api 的方法中,例如 #attributes
或 #to_json
.
它也会破坏关联。
class UserSubscription < ApplicationRecord
belongs_to :subscription_plan
belongs_to :new_plan, class_name: 'SubscriptionPlan'
end