自己的思路
看到教程的提示 "上传简历的网址应该长成这样:/jobs/1/resumes/new"
而且提醒去参考一下Rails101的做法, 然后看到routes的设定时
这样的设定就能变成
第二层是jobs里面的项, 就是具体到 "job" 而不是 "jobs" 的页面设定...那么在 "job" 层面设计一个 spacename 叫 resumes就可以咧? 这样是具体去哪里设定呢...
哦, 不是让我去参考这么前面的教程, 估计是要参考rails101的 6-2 之后的教程内容...发现post是在groups旗下的group每项里面进行posts的 (注意单复数哦, 能看出是"单项元素"还是"元素组合" 区别很重要!)
要借用posts的网址生成智慧!!!
自己动手玩一下
开个新branch去玩看看, 这样再对比教程学的主动些, 印象会更深.
错误记录
第一个错误
建立了resume的model后直接想去建resume的controller了. 忘记了要rake db:migrate, 还忘记了要建立jobs users 还有 resumes的三边关系...不建立的话, 鬼知道resume跟其他表格如何互相关联啊喂!!!
第二个报错
写了resume的new view代码后报错, 我觉得是是因为参考job的controller代码写完resume controller的代码有问题.
这里是找不到resumes_path的意思? 估计resume controller里定义出问题了. 它是job旗下层级的逻辑, 所以resume的controller不能那样写...全部要先找到"job"后才能进行resume的这层级指令. 想跳过"先找到job层级"这步直接去resume层级是无法实现的, 所以改成
有趣的区别是
1. 找job时 params里是job_id
2.还为了后期打算 加入 resume.user = current_user
3. 跳转页面的redirect_to job_path(@job)这里也有个@...啊...到底啥时候要加它啊!
嗯, controller的确有问题, 但是改正后, 依旧报错...
所以推测是view的代码有问题, 要跑去参考教材改. 我自己瞎写的如图
改成
改了好多细节, 自己多看看, 这样一改就完成debug啦~
原来报错里面指出的问题真的是这行有问题, 指讲@resume是不够的...要 [@job,@resume] 果然还是因为我乱跳层级, 越过job层级是不对的!!!
遇到问题
问题一 "resume上传PDF"的栏位是否要添加?
一动手就发现一个问题, 添加resume的model时, 是有content栏位, 但需要有"上传resume"的栏位吗?...应该要有, 这样后期能计算上传数量, 但是"上传resume"是什么格式呢? 不是string 不是integer 也不是text...
唯一想到的是, 先只放一个content:text的栏位吧, 反正如果有需要可以后面用migration加栏位上去.
参考post的代码后, 觉得要能跟job关联起来, 而且后来还需要算共有多少份提交简历. 所以应该不止有content栏位, 还要有 job_id 以及 user_id 这两个栏位才对.嗯! 注意 resume_id不用加, 因为model创建的时候, 自动就有啊!
问题二 创建model的时候, 是"单数"还是"复数"呀?
比如代码是 model job/resume 还是 model jobs/resumes?...Orz 这个单复数的理论要怎么理解呀.
问题三 接着要写的routes单复数
遇到问题是不知道namespace 后接 "resumes"还是"resume". 这里的单复数应该只是看网址要求写的吧? 要求是"/jobs/1/resumes/new"的样式, 所以是复数?
那么namespace下的resources后面到底是jobs还是resume是啊...
问题四 resume controller里面需要def index吗?
估计要看需求吧, 如果其他users也能看到全部resume提交情况没有必要的话,就不需要def index. 那显示个提交的title呢? 或者数量呢?
那如果一开始没有def index的话, 需要def show吗? 这show好像不是专门显示index的全部列表的情况, 点击到每个resume也能看到单独页面或者就算是new页面的显示都需要def show吧?
问题五 View里面的代码要具体指向谁
尝试写job show页面里面可以"点击上传简历"的链接. 然后开始困惑, 这里是 "resume" 还是 "job". 应该是 resume吧...等下跑跑看.
解答遇到的问题 汇总
问题一的答案
我自己尝试写代码后,觉得要添加这个栏位啊, 不然后面写resume的controller时, 定义resume_params的部分, 必然要添加"上传resume"的参数的. 不能只permit.(:content) 这仅仅content一个参数而已吧
结果教程直接打脸, 的确只是定义了三个栏位, "job_id" "user_id" "content" 并没有"上传PDF格式简历"这个栏位...妈呀...
问题二的答案
嗯, 是"单数"的...复数会报错的哦! 然后我还写错了, 不用在自己新建的一个jobs文档旗下建resume的model, (rails g model jobs/resumes XXX 这样写就有这样的效果...) 而是直接建resume的model即可(rails g model resume XXX) 大概是因为model是数据表格, 而且项目已创建了jobs父文档了, 这resume跟之前的job,user等等数据表格都平等的感觉?
问题三的答案
不是我那样写, 而是直接在已有的resources :jobs下面添加resources :resumes就好...我一开始写的是
其实不用namespace来写...直接在resources :jobs下面加第二层就好了. namespace估计是"平行世界"的意思, 这里的resume跟jobs是"同一世界", 不用建立一个"类似却有微妙不同的平行世界"
问题四的答案
结果尝试了一下, 不写def show只是def new, new的页面在view写完后, 可以呈现. 妈呀...原来只要写new/create edit/update 这两对组合就能正常使用. (后来发现, 教程并没有写edit/update这一组...)
而不用定义resume index的真正原因,不是所谓的"看需求"而是...因为它的index就在Job的show上定义啊!!! 全部的resume是要出现在job旗下的呀!!! 所以resume controller里不用定义index, 因为它的all是要去 job controller里面show定义下撸代码给定义的!!!! 妈呀!!!
问题五的答案
嗯, 那样的代码一跑, 立马报错
然后参考rails101教程, 发现前面要加一个 "@"
而且指过去的对象是job 而不是我认为的resume...估计是因为要先找到job才能继续找resume...而resume的抓取指令已在前面的"new_job_resume_path"部分指定的很明确了...所以剩下只要告诉它要去job下找...
还把<p>给去掉, 因为不是段落吧...center也不知道怎么写...
还要注意, 按钮的代码是跟在最后的, 可以用class来实现...
大反转
玩到目前为止, 自己边瞎写边学习都挺顺利, 结果resume的new能呈现了, 但是...无法提交!!!
这个不能提交...是因为...没有在job的show action里面定义好要显示resume吗...尝试看看.把老的job show
给改成
嗯...结果还是不能提交...😂
啊...莫非...忘记改job show的view代码了, 不然怎么显示?(BTW 需要显示吗?!!)
嗯...失败了...还是不能提交...
啊...目前积累够多的磕磕碰碰, 能吐槽的点也够多了, 开始对比教程写吧. 别乱来啦~