Ruby on rails 将属性名称从关联的子模型拉到父模型
*我正在尝试将地址模型的属性名称拉到用户模型,但此方法不起作用,因此任何人都可以提供帮助*此处不太需要-我认为您只需要在Ruby on rails 将属性名称从关联的子模型拉到父模型,ruby-on-rails,Ruby On Rails,*我正在尝试将地址模型的属性名称拉到用户模型,但此方法不起作用,因此任何人都可以提供帮助*此处不太需要-我认为您只需要在csv\u值中输入地址 class User has_many :addresses def csv_header self.addresses.attribute_names end def csv_values self.addresses.all do |addr| addr.attributes.values en
csv\u值中输入地址
class User
has_many :addresses
def csv_header
self.addresses.attribute_names
end
def csv_values
self.addresses.all do |addr|
addr.attributes.values
end
end
end
class Address
belongs_to :user
end
这能帮你解决这个问题吗
为了代码的清晰性,我会尝试稍微改变一些东西,并使用委托
:
class User
has_many :addresses
def csv_header
addresses.attribute_names
end
def csv_values
addresses.map do |addr|
addr.attributes.values
end
end
end
class Address
belongs_to :user
end
然后,您可以调用user.addresses\u属性\u名称
和user.addresses.mapped\u值
您也可以调用Address.column\u names
来获取标题数组,前提是它始终保持一致,很可能就是这种情况
希望有帮助
根据评论更新:
要为用户实现同样的功能,可以调用以下命令:
调用User.column\u names
或User.attribute\u names
获取标题(前者在类上,后者在实例上)
如果还需要用户的映射值,则可以从地址模型中跨self.mapped\u values
方法复制并使用该方法。这有点重复,但对于像这样的一对方法,我不想将它们分离到一个单独的模块中
最后一个提示-如果您正在从一组用户(即User.all
)调用address
方法,请确保将其调整到地址,以避免以低效的方式(User.includes(:addresses)…)命中数据库。可能的重复方法非常有用,还可以包括用户模型的属性和地址属性。Morning@MykBKibz-已更新我的答案以包括以下内容:)
class user
...
delegate :attribute_names, to: :addresses, prefix: true, allow_nil: true
...
end
class Address
...
def self.mapped_values
all.map { |addr| addr.attributes.values }
end
...
end