MyTrip自定义攻略网项目启动
Rails new了MyTrip文档
开始写后端代码啦, 先安装一波必备gems. 昨天用第一版问卷做了小范围的前期调研, 梳理结果给了一定方向. 准备做出初版后, 先Deploy给这几个朋友看看. 然后做第二版调研, 届时继续迭代.
但别忘记, 我的初衷是给自己用的哈哈哈
Lay out前期基础们
做版本控制要用 git init
而不是 git init.
末尾没有点哦
创建前台的City以及旗下的posts
我的思路是
-
先创建city的model, 直接在migration里面定义清楚它旗下的栏位. 如"简介""图片" 等栏位, 如果想不出还有什么栏位要补充, 就先搞定最小可行性的. 后面再调
-
然后建city的controller, 定义好CRUD
-
接着把routes给定义好
-
写前端的view代码, 写搞一波能用的就好 别管设计细节
-
接着马上建post的model, 也是在migration里面定义清楚栏位, 大概十个栏位吧
-
然后建post的controller, 定义好CRUD
-
搞定routes
-
写前端的view代码, 该有的数据能呈现就成, 别管数据
教程的打脸
忘记model间的关联
创建model后, 又忘记关联...不关联rails怎么知道他们间的关系啊喂...这个错误犯好几次了, 每次都是因为撸代码断断续续造成的...中间断开真容易忘...
而且看了教程跑去关联的时候, 还关联错误...三者间的关联...不是只有两个model关联就好...是user/cities/posts三人的关系...Orz
而且忘记在post这个链接model里面, 添加user_is
还有city_id
了, 没有这些也不行, 赶紧添加栏位去! 不然在写post index
定义的时候都无从下手...而且...post的index要去city show
定义...跳转的层级没彻底熟练才出错吖 Orz
页面太多层级 完全混乱
我在『网站多层级的跳转页面』问题上犹豫很久, 之前比赛时就被这个问题卡很久. 心生畏惧... 但这次时间紧张, 所以虽然断断续续的, 我还是硬着头皮上, 居然搞定了!!! 秘籍是动手画图帮助理解 卧槽把我的专业习惯都给逼出来了...不愧数学系的...但重要的是 it worked!!! 效果超好, 瞬间梳理出来了

最值得开心的是, 我的态度从早上的"不想面对", 到期间的"一直纠结", 最后晚上居然搞定了. 解决了自己有心理障碍的困境真是可喜可贺. 很多困境, 战胜后才知道要多坚持一下, 能搞定. 嗯? 这不是拼了命的把个『开放式问题』凭一己之力变成『封闭式问题』嘛...哈哈哈哈 果然开放式的最可怕 因为"也许坚持也找不到答案"的未知感真的很恐怖
层级跳转没搞清楚时, 就会写错代码啊

这个层级问题没搞清楚前, 我连手绘的流程画面草稿都画错了, 直接漏过了city show
页面. 从 city index
直接跳去画 post show
了, 所以跳转问题搞清楚真的很重要. 补上了缺失的city show
页面图稿后, 感觉一切都顺畅了! 撸代码的爽感, 跟撸数学题目应该是一样的, 就是这种解决了问题的成就感吧
特殊的controller复数名词
还遇到个疑惑, 之前controller的复数形式都不是"变体复数". 像group变groups啥的, rails能识别我不惊讶. 今天的model叫city
, 它对应的controller我就起名叫cities
...这特殊复数形式... Rails能识别吗?!
哦! 我觉得能识别, 在定义CRUD时不是用 @cities = City.all
把city跟cities联系上咩~ 代码果然要自己写一套才能更深刻理解! 而且跑去看routes也显示了它能识别出特殊的复数形式. 帅气!
第一级层次cities的报错
弄好cities的CRUD还有view等代码后, 也没测试一下就跑去做其他了...才发现连submit都无法submit...金手指去尝试一下, 看log报错是user的问题?
对比教程, 没错啊...尝试了post的submit, 是能正常添加的...嗯, 凌晨3点了...先去睡吧 睡饱才能精神点搞定
嗯, 现在是7月6日, 昨天本来想一口作气完成后端代码呢, 白天东摸西摸的搞到大晚上才真的动手, 结果太困就一堆报错... 导致早上半梦半醒的还梦见是因为model的命名用单数的city
, 而controller的命名用复数的cities
导致user
在报错...
结果尝试了一下google到的第一个办法, 就成功了...到city model
里在 belongs_to :user
后面加一个条件 变成 belongs_to :user, optional: true
就能成功提交数据了...
报错解决了, 但我不太确定这样改会导致什么问题, 有空时请继续研究
- 参考资料
If you set the :optional
option to true, then the presence of the associated object won't be validated. By default, this option is set to false.
被post的show页面代码卡住
这页的数据要怎么抓啊...

@post
改成@city.post
...报错...要怎么抓到正常的数据呢?
等等...我查看了rails101教程或发现后端代码错误来源...我忘记关联cities与user...不但是一开始model没有关联(后来弄post时发现问题补上), 还忘记在cities的controller里面加user_id
...所以才导致前面要用 belongs_to :user, optional: true
来debug吧?!! 真实的bug原因其实是我没在city model里加user_id
啊啊啊!!! 说不定搞定后, post view页面问题也解决了!
果然! 添加了user_id
栏位后, 去掉 belongs_to :user, optional: true
的尾巴 optional: true
也能正常的添加新城市了! 妈耶! 我试图调post view代码, 居然解决了之前我以为已解决了的bug...幸好发现了, 因为我加了 optional: true
后一直隐隐担忧.
好, 继续, 现在怀疑是city show页面的posts列表链接写错... link_to(post.address, city_post_path(@city)
我怀疑要修正括号里的链接params, 不是仅仅只是 @city
而已 准备去购物车教程里面拆可以用的语法...未果...却在观察网址的时候发现


现在是7月7日凌晨三点...我还是先去休息吧, 明天开一个新分支来解这bug.
嗯...一觉睡到中午11点... 起来继续研究show的API问题. 多看实操例子之后发现, post_id
就是取的city_id
...却不显示"city旗下"的post...这个问题真是神奇...没有关联好吗? 认真观察了一下rails server
的记录, 发现一个可能是突破口的差异

为了验证我的推测, 我把city show
页面的posts index部分的代码全部删掉了, 然后再尝试打开不同层级的页面, 发现没了posts index部分代码后
Rendering cities/show.html.erb within layouts/application
这代码后就没那句"抓取posts的代码"了, 所以问题是出在post show
页面的代码上. 并不是我怀疑的city show页面的post index代码部分的数据衔接问题. 即, 不是@city
写错

不对, 再认真看看rails server log就会发现, 虽然没有继续执行"第四个变量", 问题却很可能还在city show页面的代码(即post index页面), 因为去post表单抓数据用的id很怪

归属于此user旗下的posts的抓取
是一样的, 教程里有这个啊啊啊

edit
按钮, 尝试了一下功能. 妈耶...连edit功能也都全部找错误的post_id...都只认city_id了, 无法定位到自己的post_id上! 肯定是post controller写错了!
哈哈哈哈!!! 我最后还是不信邪, 没去改post controller
, 还是去改了city show
即post index
的跳转HTML代码. 改成了 (@city, @post)
然后根据报错页面的关键词Google出了答案!用
# [No route matches missing required keys: [:id]
这段报错的关键词, Google到了答案, 就是 『nested routes』的写法! 我最初的怀疑是正确的! 不过我没自己试出这个正确写法!!! 正确答案离我第一个尝试的@post
改成@city.post
真的很接近


这个简单的bug我给解的千回百转的, 但是过程真的提高很多, 逼着我头一遭去看了rails server的log, 认真看了它的内容学习到server的脚本式执行的做法. 还实践了一把如何把代码写烂, 爆炸报错后如何正确有效的Google...两天折腾下来还是学到很多, 恭喜!!!
特别想对自己说『还好我没放弃』搞定后觉得其实很简单而且感觉很有成就感. 以后想放弃时, 就回想这次的经历吧!