把edit定義到?jīng)]大問題的感覺
就繼續(xù)嘗試update的定義, 如下截圖的方法可以避開報(bào)錯(cuò), 不過...
把update這樣定義巨厲害...改其中一個(gè)post文章的edit界面內(nèi)容, 全部整個(gè)user post過的文章全部一起改了,連不是group owner的group里的post內(nèi)容都改成一致, 臥槽, 效果太牛了哈哈哈哈哈
一整排都一樣太彪悍了哈哈哈
真的覺得從edit的定義開始就有問題了哈哈哈哈 繼續(xù)試吧.?
我現(xiàn)在真的很想知道去哪里查正確的params們啊哈哈哈哈
Second Try
一通改都不滿意, 然后把edit的內(nèi)容改成如下截圖的
這樣說(shuō)不定定位能準(zhǔn)一些, 別全部的post一起改動(dòng). 嘗試一下. 接著把update的定義改動(dòng)成這樣
結(jié)果還是全體一起變, 媽呀, 太好笑了哈哈哈哈
再嘗試一次! 認(rèn)真觀察一下之前的CRUD里update的部分, 改成如下
終于成了哈哈哈哈哈哈!!!?
不是@post = Post.update(post_params)
而是@post.update(post_params)
整個(gè)就能對(duì)單獨(dú)的post改內(nèi)容了!!! 太high了哈哈哈哈哈 居然把問題解決了哈哈哈哈哈哈哈
彩蛋
接著玩一下, 看看是什么精準(zhǔn)定位到了獨(dú)自的post~~
第一個(gè)改動(dòng)
先玩一下edit的def部分, 改回去
看看效果
嗯, 不會(huì)報(bào)錯(cuò). 但無(wú)論挑選哪個(gè)post改動(dòng), 只能改動(dòng)之前已經(jīng)改動(dòng)的那個(gè)post.?
比如, 之前改了第九條的內(nèi)容. 我現(xiàn)在就算點(diǎn)擊第一個(gè)post的內(nèi)容, 到edit頁(yè)面也不會(huì)顯示第一條post的內(nèi)容, 而是第九條的內(nèi)容. 改動(dòng)內(nèi)容submit后, 回到posts的頁(yè)面也只顯示改動(dòng)了第九條的內(nèi)容. 第一條內(nèi)容紋絲不動(dòng)完全不受影響. 真是神奇哦哈哈哈哈, 這就是params[:group_id]的神奇了吧?!!
第二個(gè)改動(dòng)
把edit改成正確的, 接著試著改一下update的內(nèi)容
刪掉 @post = Post.find(params[:id])這條看看效果
效果是報(bào)錯(cuò), 跳過這步后, 直接找不著北了, 感覺也是post都沒給個(gè)方向
第三個(gè)改動(dòng)
把@post = Post.find(params[:id])
改成@post = Post.find(post_params)?
看看效果
看來(lái)這樣是找不到post的id的, 畢竟post_params是我自己定義的調(diào)出post具體內(nèi)容用的代碼, 并不是內(nèi)建的一個(gè)id數(shù)據(jù), 而是一個(gè)復(fù)合型內(nèi)容, 并不是post的id呢~
第四個(gè)改動(dòng)
刪掉@post.group = @group這行代碼
居然完全沒有影響, 我去, 原來(lái)這行不需要的咩?!!!肯定有啥作用吧?!!! 還是說(shuō)在edit已經(jīng)定位完成, 所以這行刪掉沒有影響?! 肯定有啥作用吧?! 在create里面存在一定有用吧? 說(shuō)不定要等我更厲害了才知道它的作用吧...OK,繼續(xù)試
第五個(gè)改動(dòng)
刪掉@post.group = @group這行代碼 的基礎(chǔ)上, 繼續(xù)刪除?@post.user = current_user
就是兩行代碼都一起刪掉, 感覺去掉兩個(gè)限定條件的感覺, 看看效果
完全沒有影響...
最后總結(jié)
最后, 變成這樣了...這樣的update的def版本, 也是能正常運(yùn)作的...
create里面給那么限定條件, 這里可以偷工減料什么原理?!!! 希望能早點(diǎn)搞明白!!!
不過anyway, 恭喜自己找到最簡(jiǎn)約版的寫法?!?
P.S.?
我猜, 估計(jì)可能是因?yàn)閎efore_action限定了只能是注冊(cè)用戶才能改動(dòng)...哦, 不是...估計(jì)是因?yàn)槲以O(shè)定了只顯示current_user自己的post頁(yè)面, 才導(dǎo)致從view上面的button們點(diǎn)擊這條途徑無(wú)法對(duì)此user的post動(dòng)手腳. 找到了post_id的話, 非此user也能從后門進(jìn)來(lái)改動(dòng)post的內(nèi)容.哦哦哦, 如果是這樣的話, 如果我嘗試走后門的方法, 估計(jì)能用另外一個(gè)用戶登錄的情況下, 在缺失那兩個(gè)限制條件的情況下直接改動(dòng)其他user的post!!!
嘗試我的猜想
臥槽...我在用戶A登錄的情況下復(fù)制了edit的頁(yè)面
http://localhost:3000/groups/9/posts/1/edit
然后登出, 用用戶B登錄, 然后復(fù)制這個(gè)網(wǎng)址, 真的可以改動(dòng)用戶A的post內(nèi)容!!! 而且post改動(dòng)完成后, 還是回到用戶B的accout_posts的頁(yè)面(顯示用戶B的全部posts的頁(yè)面),查看用戶A的post, 內(nèi)容真的被改動(dòng)了!
簡(jiǎn)直了! 我猜想是對(duì)的!!!?
First Try
試試看, 如果只加回去@post.user = current_user會(huì)如何
居然還是能改內(nèi)容, 而且顯示在用戶B的post頁(yè)面里面了, 之前用戶B的post只有兩條. 沒有加
@post.user = current_user
這條的時(shí)候, 能走后門改動(dòng), 而且改動(dòng)后的post還不會(huì)顯示在用戶B的posts頁(yè)面里面...媽啊~有趣!!!變成判斷是current_user改動(dòng)的就是顯示在這里, 好奇此條是否顯示在用戶A的頁(yè)面?
媽呀, 用戶A的頁(yè)面上這兩條被用戶B走后門改動(dòng)掉的post都消失了, 不顯示在這里了!!!
Second Try
在user這條代碼保留的情況下, 繼續(xù)加回去@post.group = @group 看看效果
用戶B的頁(yè)面還是能繼續(xù)顯示耶...媽呀...看看用戶A的情況
改動(dòng)的那條, edit后又跑去用戶B那里了哈哈哈哈!!
雖然沒有搞清楚@post.group = @group的作用,? 但我知道要多加一條限制, 就是只有current user能做改動(dòng)? 不對(duì), 不是current_user, 而是創(chuàng)建人本人才可以改動(dòng)...這是before_action要寫多一個(gè)限制? 或者是要設(shè)置一個(gè)什么條件, 要建一個(gè)表單, 鏈接user跟post的表單,對(duì)應(yīng)關(guān)系也寫進(jìn)code才能保證走后門的事件不會(huì)發(fā)生...這個(gè)嘛...三刷的時(shí)候再嘗試吧...現(xiàn)在超級(jí)困. 先這樣哈哈哈哈
不讓走后門事件發(fā)生, 可以參考Rails101教程的5.5, 會(huì)有解法哦
新的發(fā)現(xiàn)
嘗試了一下, 發(fā)現(xiàn)文章會(huì)從之前的創(chuàng)建者轉(zhuǎn)移到 后來(lái)"走后門"改動(dòng)文章的賬戶下, 是因?yàn)檫@條代碼
update之中我寫了一條
@post.user = current_user
就是把post的創(chuàng)建人從"之前的"改變成后來(lái)"走后門改動(dòng)"的人的...這條代碼刪掉后(前面加 # disable掉后), 創(chuàng)建人就不會(huì)變動(dòng)了, 我覺得估計(jì)這代碼在update中可以保持無(wú)效狀態(tài).?