Ruby on rails 如何通过顺序、查找、位置等调用来保持关系的倒数?
鉴于以下类与的关系,逆类与有许多关联:Ruby on rails 如何通过顺序、查找、位置等调用来保持关系的倒数?,ruby-on-rails,ruby-on-rails-3,rails-activerecord,Ruby On Rails,Ruby On Rails 3,Rails Activerecord,鉴于以下类与的关系,逆类与有许多关联: class User < ActiveRecord:Base has_many :accounts, inverse_of: :user end class Account < ActiveRecord:Base belongs_to :user end 下面的代码显示,在执行新的sql语句(顺序命中数据库)后,反向关系不会持久化: 如何确保我的用户对象在执行订单、查找、位置等调用后仍然保持不变?如果要保留objects属性但不想保
class User < ActiveRecord:Base
has_many :accounts, inverse_of: :user
end
class Account < ActiveRecord:Base
belongs_to :user
end
下面的代码显示,在执行新的sql语句(顺序命中数据库)后,反向关系不会持久化:
如何确保我的用户对象在执行订单、查找、位置等调用后仍然保持不变?如果要保留objects属性但不想保存记录,则可以尝试使用
attributes=(new\u attributes)
或assign\u attributes(new\u attributes,options={})
就你而言:
u = User.first
u.attributes= :some_not_saved_variable => "123"
或
资料来源:我认为不可能 使用的
inverse\u可以获取用户对象,而无需再次拉动数据库,因此某些未保存变量
(123)的未保存值将保持不变
但是,如果调用order
、find
、where
等,将生成一个SQL,存储的数据将替换未保存的数据
如果没有
的逆项:
u.accounts.first.user.some_not_saved_variable
#SELECT "accounts".* FROM "accounts" WHERE "accounts"."user_id" = 1 LIMIT 1
#SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
=> "database value" #123 will be lost
u.accounts.first.user.some_not_saved_variable
#no SQL statement
=> "123" #123 persist
使用的逆函数:
u.accounts.first.user.some_not_saved_variable
#SELECT "accounts".* FROM "accounts" WHERE "accounts"."user_id" = 1 LIMIT 1
#SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
=> "database value" #123 will be lost
u.accounts.first.user.some_not_saved_variable
#no SQL statement
=> "123" #123 persist
调用订单
,查找
,其中
等:
u.accounts.order(:created_at).first.user.some_not_saved_variable
#SQL to order by created_at
因此,它将始终访问数据库,未保存的值将替换为数据库值
u.accounts.order(:created_at).first.user.some_not_saved_variable
#SQL to order by created_at