gpt4 book ai didi

ruby-on-rails - 如何通过提取另一个模型的名称来确定模型?

转载 作者:太空宇宙 更新时间:2023-11-03 18:31:26 26 4
gpt4 key购买 nike

我有几个模型:ContactEmail、ContactLetter、ContactCall

我的 Controller 不知道传递给它的是什么。它只知道它是一个事件(因此事件可以是 ContactEmail、ContactLetter、ContactCall 的特定实例)

其中每一个都有不同的属性。 ContactEmail有email_id; ContactLetter 有 letter_id,ContactCall 有 call_id。

所以这是我的问题:

对于事件的任何给定实例,我如何访问适当的模型和关联的 ID?

换句话说,如何从事件中提取模型名称(Email、Letter),然后分配正确的 ID(email_id、letter_id),然后找到正确的记录?

我从以下几点开始:

      model = event.class # this will show ContactPostalcard  
puts event.send('contact_id')
puts model
short_model_name = model.name.sub('Contact','')


puts short_model_name
short_model = short_model_name.class

key_name = short_model_name.foreign_key
puts key_name
asset_id = event.send("#{key_name}")
puts asset_id

asset = short_model_name.send(find.send(asset_id))

我想做的是找到事件中隐含的关联 Assets (Email、Letter),并获取每个 ContactEmail 中的 email_id(letter_id、voicemail_id)引用的特定 Assets 。

例如:asset = Email.find(ContactEmail.email_id) 会给我 Assets 。所以我需要能够动态创建“电子邮件”,email_id。我在概念上有这些片段,但它不起作用:(。

授予 Chubas, 但想验证这是否是正确的方向(一些附加信息/说明):

ContactEmail.rb

class ContactEmail

def get_asset
email_id = self.email_id
asset = Email.find_by_email(email_id)
return asset
end
end

这样看起来对吗?

最佳答案

你可以用正则表达式来做

event.class.name.gsub(/Contact/, '').downcase + '_id'

但我当然更倾向于将方法 contact_field_id 添加到所有这些类中,并且只需要 model_name = event.contact_field_id。不仅更清洁,而且更具可扩展性。

编辑:

似乎您正在尝试将逻辑放入 Controller 中以找到从数据库中获取的正确实例。这不应该对应于 Controller ,而是对应于模型。按照我之前的建议,我会这样做:

class ContactEmail
def contact(id)
Email.find_by_email_id(id)
end
end

class ContactLetter
def contact(id)
Letter.find_by_letter_id(id)
end
end

因此您不必担心找到合适的类,只需调用@event.contact(id)。也许这就是您要找的

关于ruby-on-rails - 如何通过提取另一个模型的名称来确定模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3432100/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com