当前位置: 首页 > 科技观察

我的Rails之旅的第2天:Rails链接和拖动div

时间:2023-03-16 23:04:22 科技观察

大家好!今天是我构建这个玩具项目的第二天。再来记录一下Rails的一些趣事吧!目标:做一个冰箱诗歌论坛我想做一个无聊的标准网站来学习Rails,其他人可以与之互动,就像一个论坛!各种各样的问题(如果他们是垃圾邮件发送者怎么办?或者只是意思?)。我想到的第一个想法是让人们与网站互动但实际上不能在上面打字,那将是一个“冰箱诗歌论坛”,它只给你一组固定的词,你可以把它们放在一起任何你想要的。所以,这是我们的计划!我在这个项目上的目标是找出我是否可以将Rails用于其他小型Web项目(而不是像我通常那样使用Flask等更基本的东西,或者放弃后端并用Javascript编写所有东西)。如何来回拖动单词?为jQuery拖放UI!我希望人们能够拖动文本,但我不想写很多Javascript。事实证明这非常简单-有一个jQuery库可以做到这一点,它被称为可拖动!起初,拖动并不成功。一开始拖动在移动设备上不起作用,但是有一个技巧可以让jQueryUI在移动设备上工作,称为jQueryUItouchpunch。这是它的样子(如果你有兴趣看看它是如何工作的,你可以查看源代码,代码很少)。bananaforestcake是一个有趣的Rails特性:关系我以前从未使用过关系型ORM,我对Rails感到兴奋的一件事就是看看使用ActiveRecord是什么感觉!今天我了解了Rails的ORM特性之一:关联。如果您像我一样对ORM一无所知,那么这就是它的全部内容。在我的论坛中,我有:UsersThreads(我打算称它为“线程”,但显然这是Rails中的保留字,所以现在称为“线程”)。帖子显示帖子时,我需要显示创建帖子的用户的用户名。所以我想我可能必须编写一些代码来加载帖子,并为每个帖子加载用户,就像这样(在Rails中,Post.where和User.find将运行SQL语句并将结果转换为Ruby对象):@posts=Post.where(topic_id:id)@posts.each做|post|user=User.find(post.user_id)post.user=userend这还不够好,它必须为每个帖子单独执行一次SQL查询!我知道有更好的方法,我发现它叫做关联。此链接是来自https://guides.rubyonrails.org的指南,到目前为止它对我有用。基本上我需要做的就是:添加一行has_many:post到用户模型。添加一行belongs_to:user到Post模型。Rails现在知道如何连接这两个表了,即使我没有告诉它连接哪一列!我认为这是因为我将posts表中的user_id列命名为它期望的约定。对用户和主题做完全相同的事情(一个主题也有很多帖子:has_many:posts)。然后我加载每个帖子及其关联用户的代码就变成了一行!这一行:@posts=@topic.posts.order(created_at::asc).preload(:user)比一行更有效1个查询中的用户。显然,在Rails中有很多不同的方法可以做这样的事情(预加载、预加载、连接和包含?),我还不知道这些是什么,但也许我将来会知道。一个有趣的Rails特性:脚手架!Rails有一个名为rails的命令行工具,可以生成大量代码。例如,我想添加一个Topic模型/控制器。我不必弄清楚在哪里添加所有代码,只需运行railsgeneratescaffoldTopictitle:text并生成一堆代码,这样我就已经有了创建/编辑/删除主题的基本端点。例如,这是我当前的主题控制器,其中大部分我没有写(我只写了突出显示的3行)。我可能会删除很多内容,但有一个起点让我可以扩展我想要的部分并删除我不需要的部分,这感觉非常好。数据库迁移!Rails工具还可以生成数据库迁移!例如,我决定删除帖子中的标题字段。这是我所做的:railsgeneratemigrateRemoveTitleFromPoststitle:stringrailsdb:migrate就是这样-只需运行一些命令行命令!当我更改我的数据库模式想法时,我运行了几个这样的迁移。到目前为止它非常简单-感觉很棒。当我尝试向某些字段为空的列添加“非空”约束时,事情变得有点有趣——迁移失败。但我可以轻松修复违规记录并重新运行迁移。今天就在这里!明天,如果我有更多进展,也许我会把它放在互联网上。