在ActiveRecord可以用很方便的声明方式来定义model之间的关联关系,例如:

复制代码 代码如下:
class Topic < ActiveRecord::Base
has_many :posts
belongs_to :user
end
has_many和belongs_to其实是Topic类的class method,标准写法是:
复制代码 代码如下:
class Topic < ActiveRecord::Base
Topic.has_many(:posts)
Topic.belongs_to(:user)
end
那么has_many可以给我们带来什么呢?类方法has_many在被执行的时候,给Topic的对象实例添加了一系列方法:posts, posts<<, orders.push......等等。所以当我们在model里面声明has_many,belongs_to等对象关系的时候,一系列相关的对象方法就被自动添加进来了。 让我们来自己试试看吧:
复制代码 代码如下:
module M
def self.included(c)
c.extend(G)
end
module G
def generate_method(*args)
args.each do |method_name|
define_method(method_name) { puts method_name }
end
end
end
end
class C
include M
generate_method :method1, :method2
end
c = C.new
c.method1
c.method2
我们定义了一个声明generate_method,可以接受多个symbol,来动态的创建同名的方法。现在我们在类C里面使用这个声明:generate_method :method1, :method2,当然我们需要include模块M。为什么ActiveRecord的model不需要include相关的模块呢?当然是因为Topic的父类ActiveRecord::Base已经include了模块Associations了。
类C通过include模块M,调用了模块M的一个included回调接口,让类C去extend模块G,换句话来说就是,通过include模块M,来给类C动态添加一个类方法generate_method。
这个generate_method被定义在模块G当中,它接受一系列参数,来动态创建相关的方法。于是我们就实现了这样的DSL功能:
通过在类C里面声明generate_method :method1, :method2,让类C动态的添加了两个实例方法method1,method2,是不是很有意思? 实际上rails的对象关联声明也是以同样的方式实现的。
相关推荐:
ChatGPT的梯子:突破网络壁垒,畅享智能对话的全新体验,ai的音标1001ai的音标
主题导航-引领互联网世界的智慧之路,大渡口网站建设方案
互联网快照:记录数字时代的每个瞬间,全网seo怎么优化内容
优化软件:让电脑性能焕然一新,提升效率的秘密武器,大理网站推广招聘信息最新
SEO新手必看:从零开始SEO优化的终极指南,随州网站优化技巧
ChatGPT手机下载后打不开?可能是这些问题导致的,解决方法在这里!,孤城ai动画
文章AI生成标题:让创作更轻松,内容更精彩
用AI写文章,释放你的创作潜力!
seo网站是什么找行者SEO,seo分析网站 ,ai图文梅花
专业SEO助力企业在激烈市场竞争中脱颖而出,嘉兴海外网站推广价格
seo灰帽是什么,灰帽是指什么 ,ai绘画六边形
SEO领先-如何借助SEO技术让您的网站脱颖而出,seo是黑客吗
ChatGPT恢复正常使用时间,提升你的工作与生活效率,联想电脑AI0510
SEO深度解析:如何通过深度优化提升网站排名,带来流量和转化,咸宁网站建设大概费用
优化高效率:提升个人与企业竞争力的关键,安康网站推广咨询
优化原理:提升效率、创新突破的核心法则,印刷包装推广有哪里网站
OpenAI推出的GPT-4Turbo大幅降低了AI应用成本,推动了AI技术的普及化,ai*版
ChatGPT3.5最新版:智能对话新纪元,带你进入AI的未来世界,ai苔藓生长
“只能写作”:在创作的世界里,选择文字,就是选择自由,云南关键词排名推广报价
如何识别文章是否由AI写作:技巧与方法解析
用AI批量下载工具,高效管理你的文件和资源
SEO在线服务-让您的网站快速跃升至搜索引擎前列,江西小红书营销推广案例
SEO快速排名实例:如何通过实战技巧提升网站排名,快速突破流量瓶颈,安徽ai跑步机企业
SEO检测,让网站排名飞升的秘密武器,高端快消食品营销推广
AI提取文章重要内容:让信息抓取更高效、更精准,松鼠ai 教学
SEO开发:数字营销的核心驱动力,园区网站建设
ChatGPT破解:人工智能未来的无限可能,污污AI解说
“收录量为1”,打造数字化时代的独特竞争力,网站建设页面制作流程
AI自动化:开启智能未来的无限可能,simplify ai
seo站内关键词优化,seo关键词优化经验技巧 ,ai 优点
文章AI指令提升写作效率的智能助手
个性化广告:新时代营销的秘密武器,建设经营性网站怎么记账
SEO经营:助力企业腾飞的秘密武器,靖边百度关键词排名
什么是SEO可以自学吗,seo零基础可以自学吗 ,ai1紫
SEO教育:搜索引擎优化,开启成功职业之路,搜狗SEO排名接单
AI撰写工具的无限可能,让内容创作更高效、更精彩!
SEO目标:让您的网站轻松登顶搜索引擎,优化购物网站的搜索
ChatGPT昨晚突然不能使用,背后真相令人意想不到!,edga ai
文章创作AI:引领智能写作的新时代
ChatGPT打不开实时问题解决方案:让你的AI助手始终在线,psd 转ai
未来科技:AI工具为生活赋能,打造智能未来
SEO项目:如何通过精确优化提升企业网站排名与转化率,武汉做网站优化的公司
什么是seo运营,什么是seo营销 ,ai绘画沙地
ChatGPT的VPN梯子:畅享全球互联网自由,打破地域限制,一直搜Ai
SEO但是,这些常见误区你真的知道吗?,凤岗网站建设开发
ChatGPT怎么打不开了?解决办法,轻松恢复畅通无阻!,ai订酒店ai对话
中国AI软实力崛起:技术创新与产业应用的完美融合,seo0066
WPQQ-开启数字时代的智能连接新纪元,杭州网站推广厂家电话
SEO永远,数字营销的核心力量,广州seo搜索栏内容
SEO运营工作是什么,seo公司运营 ,720516AI