Rails101 课外作业 3.13

第一个要求 加一个“扣分”按钮,做的事跟加分按钮相反

很容易, 把controller定义改了以后, routes也加好, View也参考upvote的写法, 分分钟搞定. 

但是一直不成功...也是郁闷了半天, 后来用rails console试了一下, model的设置是没有问题的, 能改变count的数据,也能成功删掉一票vote...

最后盯着controller的定义研究, 感觉问题在这里



搞了半天, 最后参考了教程里的rails console的后门操作,改成了更细的指定. 终于搞定了!


参考了别人的成果, 还有用last的不是first,但是用last会出现"负数"的票数,还要加条件.




第三个要求

第二个太麻烦, 先做第三个吧. 在views里面写个连接就搞定了后半部分要求. 

前半要求, 本来只加了个about的controller, 但是rake routes没有about的path们. 就又加了个about的model, 还是没有显示...才反应过来去config的routes.rb设置了就搞定了

在怀疑是不是不用加model...感觉还是一开始的想法, 只加个controller就可以了, 下次再玩看看吧(别人的成果里面显示, 直接加view就好了, 连controller都不用加. 妈呀好粗暴的写法哈哈哈)

P.S.  index的定义不一定要写内容, 照常显示哦哈哈哈哈!






第二个要求 根据投票分数排序 topics

想起用scope弄的recent排序.为了代码, 去翻了rails的常用function们页面.

一, 先尝试这样...不成...就算换成改show的定义也不行

二, 再来, 先确认一下, 的确要改index定义而非show的定义


OK, 那么参考官网的说法继续玩儿



三, 看来官网再来

报错页面内容如下...

看来只有一个想法...难到要...add_column一个? migration啊...感觉是大动作, 有必要咩...


四, Scope写法的尝试

想说, 只改controller有点不确定, 那么直接改scope会不会能成. Votes相关的model去改一下. 

然后在index定义上加上去...


嗯, 还是报错...




思路调整

现在的思路包括三种.

1. add column给topic表格,表格中加一列"votes count"的. 也许还应该加入vote_id...嗯...

vote_counts 没有可以建立连接的model...所以我感觉...这个不太靠谱? 尝试失败

2. add column给vote表格, 表格中加一列"votes count"的. 但这样,也许无法用在topic controller的index里

这样做, 好像不能建立表间关系, 因为没有vote_count的model可以建立关系...嗯...尝试失败

3. 建一个model, 叫topic_vote_relationship, 包括topic_id, vote_id, votes_count三个...

光傻加一个integer叫 vote_count的果然不够用...可以建立model的表间关系了, 但是没有定义vote count的意义...所以真的吐血...还是无法正常显示...尝试失败

(点评一下这部分的三个思路...就是自己被报错页面误导了的悲剧...真是吐血哈哈哈哈)


最后解法

一直觉得不用大动作, 一行代码就够才对, 因为vote_count是一个本来就"内建"好的代码, topic的view里面的table都能直接用代码计算不是吗? 所以应该可以直接写. 奈何vote_count怎样order都没效果...

就去参考了同学的答案...其实Google果然是要坚持的做法, 我应该继续Google下去就能发现

vote count果然是内建的, 因为直接改view也能用...就是要加个"-"因为要用倒序

话说, controller里面如果去掉最后的reverse就是正序, 加上就是倒序


但是我尝试出自己的更简短的写法


认真看看这个写法, 就是sort_by的语法, 用在每个topic上, 就用到了 "|topic|" 然后追加每个topic要执行的代码. 要算的是votes,复数哦, 可以理解这背后逻辑~~


搞定~

你可能感兴趣的:(Rails101 课外作业 3.13)