名無乚
[ROR] 一些問題
其實都不太算是 rails 的問題,我是想知道這些東西在rails底下是怎麼做的。
1. rails額外的功能該怎麼擴充? (Plurk Paste)
l• ܫ•) Davyキュルッ
後面很多問題都是 google 就可以得到 gem 的
JokerCatz
1:請用Ruby自幹,Rails的底是Ruby,如果你連Ruby都寫不出來就搞個屁啊,&純Ruby寫好後丟到lib/去,然後去config/application.rb下去require '檔名沒.rb'就可以用該lib了,建議寫成class或是module開頭整個包起來
JokerCatz
2.增加一個column為delete_at : timestamp,然後覆寫 model 的 def destroy 去做update的動作,然後上default_scope default_scope (ActiveRecord::Base) - APIdock
JokerCatz
3.使用奇怪的logger gem或自幹callback(寫model的before_save / after_save...)或是Ruby的logger即可
JokerCatz
4.全自幹,用mysql就可以做了,順序我另外寫,報表自動生成一直都很困難,請自己找解法,因為你列的那邊一票non-free,pdf可用non-free的『pdf Prince』,html做好就可以連PDF一起出了 RDBMA報表製法,心法:用DATE進行壓縮,類似 (Plurk Paste)
JokerCatz
5. 請愛用全文搜尋,技術債請補,有兩個可以選,solr和sphinx,兩個都是全文搜尋的顯學,應該很好找才是
JokerCatz
6.自幹,別偷懶,前端自己練,自己去玩玩看form helper ^ form tag helper,裡面一票東西可以包,select系列也組一組就好了,Rails不可能幫你做完這部分,因為它不知道該選擇那個column來做"顯示"與哪個欄位來做value,Ruby & Rails 一直都是讓程式設計師快樂,而非讓新手快樂,搞懂這個意思哩
JokerCatz
7.自幹,我問你身份證字號該如何檢查,一次出在前後端?尤其前後端邏輯可能是組合或是解構時,那你做AJAX程式該怎樣雙向綁定?你當然可以用類似
plataformatec/simple_form
的方式來完成,但驗證沒人做,所以乖乖用類似jQuery Validation的外掛做唄,它很好用的
JokerCatz
& simple_form我禁止我團隊用的,因為用那太蠢的,且自訂困難
JokerCatz
8.用devise開user & manager兩種身份,而非用同一個table加column(is_admin)的方式完成,否則很蠢,因為該table淪陷後瞬間會取得admin身份,弄好後會變成兩個登入口和可以做成完全的前後台分離,且加上類似cancancan這種權限外掛超好寫,還提供超多種方式給你寫,你想要弄成啥鬼權限表身份驗證方式隨便你,但,細節請全自幹
JokerCatz
9.Rails沒有life cycle,因為都吵完就直接上了,每個feature時間都很短,所以都直接上類似scrum來做project manager
JokerCatz
anyway別偷懶了,&你來我家練半年保證你出去嚇嚇叫,因為全部都要自己來才行,一切從無到有,地獄見過了,也就什麼都不怕了 X"DD
JokerCatz
JokerCatz
可以的話請不要碰測試,裡面的東西也信一半就好了,但不要用太多gem就是真的,否則你永遠不知道你會被那個gem搞
JokerCatz
最後,忠告,請前後端分離,你的一票問題都希望前後端綁在一起,有趣的是,N年前Rails有一票先烈和你相同的想法,搞出了一個東西,出現時很轟動,但一下子就消失了,當初我非常不愛這東西,也如我所見||| Rails RJS Templates 再探
JokerCatz
JokerCatz
&台中場下星期會教到route切namespace的用法,也就是你的第八個切成多個domain,包括robots.txt的規劃的起承轉合,你可以不要來,反正都最後一個cycle了,以後應該都不會再有
名無乚
之前就是用其他語言自幹那堆東西才會問那堆問題,因為做那堆東西,完全沒有樂趣跟挑戰性等會讓人想寫程式的推動力.......
.
還有life-cycle是指這種東西,rails底下好像沒人提到這個?都只講request送進來後的順序的樣子
J2EE: SERVLET: Servlet Life Cycle
名無乚
還有5那個,不是指全文搜尋,我舉錯例子了。
104人力銀行 - 工作機會數領先,找工作、找人才必用的人力銀行 類似職務跟地區兩個欄位的東西。
有時候那種UI的需求,會有五六項....
之前的公司是在寫公家機關的軟體,都覺得自己像是生產線上的機器人,都在搞那對看起來都差不多,但又有點不一樣垃圾事。
還有8那種,切多個domain,把不同使用者切成多個資料表是常態喔?
之前我那間公司就是那樣搞,那種設計很麻煩..... orz
名無乚
還有其他問題謝謝回答
看來換用ROR也只是換種語言而已,事情也不會比較少 orz..... 以前自幹的東西現在還是得自幹.....
名無乚
阿對了,再問一個問題,ROR輸出到網頁上除了 <%=XX%>之外還有什麼方法?
例如PHP可以這樣寫
<?
echo "網頁中的文字<BR>\n";
echo "網頁中的文字<BR>\n";
echo "網頁中的文字<BR>\n";
?>
ROR用puts會噴到console上
JokerCatz
output只有那種方式,預設有上h,解開用raw,search那個要做在後台,以前我自幹過高級貨,包括sort和多column同時search,但最後就懶得用了,要做那個要對rails很熟悉且ruby / sql功力都要一程度以上就是,不過印象中有好用的gem做類似的東西
JokerCatz
你的那個全等於<%= "xxx\nxxx \nxxx" %> \n 處自己按enter斷行意思完全一樣...你要那麼多echo做啥
名無乚
我只是舉例,因為有時候會需要在一大段程式碼中輸出文字
JokerCatz
你不是有helper可以用了,那麼dirty做啥?你真的要過那麼多處理要就在model / controller / helper內做掉,不然在view內多個變數整理,不要把那種只有一頁code的思維帶過來唄
名無乚
還有你剛剛貼的
Rails 開發者最常犯的十種錯誤 - shesee something 6: 忽視 log
媽的,那這個真的很重要
之前我們公司有遇過一個狀況,就是報表要跑個五秒才出的來 (PHP,原生開發)
我去看了一下,有個function裡面會下SQL,然後那個function又在迴圈中被呼叫到...... 導致一個報表下了兩百條SQL........
名無乚
誰跟你一頁CODE..... 我只是想在DEBUG時能在網頁上看到某些訊息,不想去翻console跟log檔
不要把我預設成新手好好不好= =
JokerCatz
Rails下也有N+1 query的問題,關鍵字至此,所以我不愛用Rails的relation,資料整理可以不用include的全自幹才是
JokerCatz
名無乚 : 不去翻log不是新手是啥...
名無乚
log是某個東西炸掉,不知道該找哪裡時才需要去找的
名無乚
知道在哪裡直接印就好了
JokerCatz
哪個rails團隊會接受你把該是log的東西丟到view去?一開始就別走錯路了...Rails有一票debug工具比你想像中的好用,可以設斷點出錯還可以等你改,有的沒的
名無乚
整天去翻log跟console我還以為是在寫 android,android只有console能印,然後印出來的東西又被淹沒在一堆信息裡面.....
JokerCatz
Debugging Rails Applications — Ruby on Rails Guides 看完,用過,再回應我,ruby toolbox也一票debug工具,你的行為被別人看到會被嘲笑的
JokerCatz
你真的不知道我所說的意思...你現在在dev mode,上production該頁會變成500而非debug msg,但你自幹印到view,上production還是會在view上,整個bug製造和hack friendly,java也有類似的機制可以上的
JokerCatz
a,我坐到迴籠了,感謝幫我排擠無聊的時光,抱歉我必須兇點,對新手太友善不是好事
名無乚
= =
名無乚
我跟你對話過後都會想跳回去PHP
JokerCatz
why not,每個領域都有其獨門之處,而也不是每個人都適合寫ruby/rails,所以我後來轉介很多人去做其他行業的,你的很多概念都根深蒂固了,不然我以後都不回你相關問題就是了,自己去摸,摸了三年之後再和我說你是否和我有相同的心得感想,我玩Rails時國內沒人問
JokerCatz
以上全都是經驗談,你就當我花時間放屁好了
l• ܫ•) Davyキュルッ
不要在 view 裡面做過多的操作……
還有<%= %>
其實就等於php的 <?= ?>
l• ܫ•) Davyキュルッ
JokerCatz : 我還是對新手來說覺得太艱深啦wwwww
雖然用太多 gem 不好不過不就是要用用看在分析哪個不好所以自幹嗎XDDD
名無乚
JC 我很感謝你的回答,因為有些問題用問得會比較快。
但是,有時候我只是問問有沒有那種功能而已,要實際使用時我會去注意其他的問題,像你說的印訊息到正式站之類的,正式開發時我不會那樣用。
但我在學的時候有時候只是為了看helper裡面出了什麼狀況,當然用方便的方法去做阿。
l• ܫ•) Davyキュルッ
我覺得你可以認真思考如何使用 Google 問 網際網路的歷史
名無乚
你是覺得我對哪段歷史不熟? = =
l• ܫ•) Davyキュルッ
我是說你的問題很多在網路上面都有人問過而且有解答了(歷史)
名無乚
我知道有人問過
那些功能我之前都寫過或是維護過,但是寫得很煩.....
從那時候開始我一直在找更好更完美的處方式
l• ܫ•) Davyキュルッ
ok 那換我回答你的問題,可能會跟 JC 講的不太一樣,不過你也就參考參考
1. 所有的 Rails 元件(如 ActionMailer, ActionController, ActionView, ActiveRecord)都是一個 Railtie,如果你想要像這些一樣的方式來擴充 Rails ,那你可以閱讀這個 Rails::Railtie 來嘗試建立自己的 Railtie
l• ܫ•) Davyキュルッ
或者是你只是想要幫 Rails 打 patch, 那你可以試試看使用這個 ActiveSupport::Concern
名無乚
先謝謝回答
l• ܫ•) Davyキュルッ
2. 修改 Rails 原本的行為,我們也稱爲「打 Patch」,所以你可以用上面的 Concern 幫 ActiveRecord 打 patch,如果不知道怎麼下手可以先看看人家是怎麼想的
winton/acts_as_archive
(當然你要直接用應該也是可以 但是這個 gem 已經不在繼續維護了
名無乚
rails果然有留地方讓人插東西進去
l• ܫ•) Davyキュルッ
3. 我記得 如果要記錄 ActiveRecord 的行為只要給他一個 Logger 就好了,但是如果要像你說的那麼細到知道是那個使用者做了什麼操作之類的這種我們才知道的記錄方式,那我建議你可以在 controller 的 before/after_action 自己做 log
l• ܫ•) Davyキュルッ
4. 用 crontab + SQL 去跑出報表就可以了,當然也可以寫 Rails 的 command line 指令(這樣就可以用 Activerecord )但是這樣太肥了(會先載入 Rails 你說肥不肥XD),但是報表的產生因爲格式也是要自己定所以雖然已經有現成的 docx, xlsx, pdf 的 gem 可以使用,但是還是達不到一個模板大家用(還是要分開寫的意思)
l• ܫ•) Davyキュルッ
(不過抓資料的地方大家都統一就是)
l• ܫ•) Davyキュルッ
這種龐大的東西還是交給前端做排序吧XDTZ
JokerCatz
Orz我不愛dirty way,我曾經看到別人的專案用了三個include也就是mixin,init裡面一票mask,對任何人來說都要翻N個code才知道它在幹啥,剛接觸的還會傻傻的去翻Rails doc說這東西怎麼都沒看過...所以我都建議寫lib而非蓋Rails的code
l• ܫ•) Davyキュルッ
5. 你貼了 google 的進階搜尋,那你看他的結果是這樣 其實他也是在表單送出了很多東西,然後 google 自己合併的,但是沒有人知道你要怎麼合併,這裏就……自己寫吧
JokerCatz
and你會Ruby的寫法就會知道天下沒有你不能幹的壞事,Ruby是信任你的,剩下其實就是道德問題Orz
l• ܫ•) Davyキュルッ
JokerCatz : 我也不喜歡,除非真的需要上 patch,還要昭告天下說我 patch 了不然我覺得這方法很討厭
l• ܫ•) Davyキュルッ
6. 「在生成前端的新增修改界面時,應該就要知道,她應該要出現多選選單或是單選選當讓使用者選才對。」 這是 template 的問題,你可以幫她擴充,或是 rails g 之後自己改,我覺得後者比較方便啊XD 當然有沒有這樣的 gem 我要找一下,我應該沒有理解錯誤你的問題?
l• ܫ•) Davyキュルッ
7.
joecorcoran/judge
apotonick/reform

因爲 form 的結構不一定完全符合 Model 的樣子,你可以接他們然後再自己寫驗證接到 Model 上的 bridge,但是我覺得這樣很蠢……
l• ܫ•) Davyキュルッ
grimen/validatious-on-rails
有了,自動接上的在這裏,但是已經不再維護了,自己斟酌要不要用XDTZ
l• ܫ•) Davyキュルッ
8. 就 JC 說的沒有異議XD 因爲最方便就是用 devise + cancan(can) 了,判斷權限限制還是要自己寫,但是他們都提供好方法了不難寫
l• ܫ•) Davyキュルッ
9. 你說的 life cycle 應該是像這個? ActiveRecord::Callbacks 他們比較分散的寫在文件裡,你可以好好利用 Ruby on Rails API 這個網站查 doc , 只是我不知道要知道這個做什麼就是了……XD
名無乚
感謝
月湖 ..._〆(°▽°*)
device + can^3 + rolify 好用!
V字龍(Vdragon)
(worship)
viki
2. 可以用考慮用 default_scope default_scope (ActiveRecord::Base) - APIdock 模組化可以用 Model concern。 DHH 有寫一份範例
dhh/gist:1014971
名無乚
名無乚
結果範例剛剛好就是is_delete的那個問題 wwww
載入新的回覆