Post · 2010-06-23 01:22

[rails] 目前的一些感想跟驚異點

作者Tony1223.bbs@aurora.mis.yzu.edu.tw (沉默是金)
標題[rails] 目前的一些感想跟驚異點
時間北極光 (2010/06/23 Wed 01:04:06)
這是一篇msn對話,不過我把我的部份整理一下,
最近沒什麼文思,所以只能這樣偷懶聊做紀錄。XD
-----------------------------------------------------
我比較有把rails融進血脈裡的感覺了
特別是我已經開始可以拿model寫json來玩了 :P
花哈哈
倒是沒有刻意要偏向前端的意思
但我覺得好的web app ,目前的呈現只是基本而已。
Q老大: java 其實也沒想像中的團結 :$
這倒是 但至少有脈絡可循
rails 的脈絡要遵循的話蠻累的 ...
就像是我們以前在玩webwork
那個相依性rule
三不五時就會踩到
有些人(如我)忍耐不住就會...
Q老大: 唔.. 我好像只踩到2次
我好像六次 XD
有幾次是我分不清楚factory該在哪一層
還有 wrapper 到現在我都還不太瞭解這該在哪一層~"~
分到helper去了... (目前還沒有機會寫到manager)
Q老大: 是要看你用了那些.再決定嚕 XD
然後wrapper 是要看目的
如果是為了輸出的資料結果做包裝 那就是歸類在helepr
如果是為了行為而包裝 就歸model *我現在是先這樣分:P
寫json的時候會需要很多 wrapper :P 因為json本身就是一種類別...
json本身就是一種資料結構
我最近在寫json的結構很有不協調感 因為它很像model 但又不能歸類是model
Q老大:我都把他當map在用:$
rails有個好用的功能是hash可以直接轉json
所以我都是包成 hash後.to_josn
q老大: 寫起來很有古老 perl class 的 fu
<%={ :hi => "hello"} .to_json%>
不過這{} 就很像是一個model XD
特別是層次一多 比方說我最近在寫得 板位跟廣告
Q老大: 怎麼有 perl 的感覺:$
{ : position => @position , :advertise => @position.advertises }.to_json
好像還是太簡單的例子 :P
-----------------------------------------------------
Q老大:看得懂壓XD
只是我不知道 renderer 會把他放在哪. 不過大概知道要幹麻
不過也不用擔心XD 寫 renderer 的人跟我約定好這個格式. 那我就不用擔心了XD
-----------------------------------------------------
rails還蠻方便的
他的folder是這樣定義的
-----------------------------------------------------
假設有個xxxx controller
controller { xxxx_controller.rb }
helper { xxxx_helepr.rb}
view { xxxx{ index.html.erb , show.html.erb ... } }
model { position.rb , advertise.rb }
-----------------------------------------------------
controller 就是webwork的action 可以透過定義method新增不同的頁面 XD
Q老大: 我知道. 只是在想 helper 是什@@
只是純粹讓你把一些view會用到的method可以放過去
不用跟view code混著method定義這樣
它controller 很單純就是負責撈資料
資料的加工 全部歸給helper在view曾去call
資料出生到死亡的順序是 model -> controller ->helper -> view
Q老大:.唔. 這路線怪怪的XD
view+helper 可能會好一些XD
Q老大:controller -> model? -> help? -> view
Q老大:那會比較像
controller -> model -> return value -> controller -> .... XD
嗯
從調用的順序來講是這樣 XD
Q老大:Model 2 的 model 沒有自己推資料的能力 >///<
他的model比較暴力一點 XD
Q老大: 如果是 Small talk 版的 mvc 就是你第一個順序了XD
ok 不過我要說的是 他在新增view的rener上 還蠻有趣的XD
render 值得一談
restful把 行為分成基本的七種嘛
index,show,edit,new,create,update,destroy
我以 index 這個行為來舉例說明三種不同類型的資料產生方式
這三種分別是 html,rss,json
Q老大: new 跟 create 有什麼不同@@?
new是產生 用來填表 create則是將填好的資料存入
edit update 這兩個也一樣
Q老大:明白
Q老大:所以 create 事實上是call 然後redirect
y
而且它判斷這幾種行為的一套基本邏輯我覺得蠻值得聊得
不過我想先講render
Q老大:嗯嗯
回到剛的話題 XD
我以 index(資料列表) 這個行為來舉例說明三種不同類型的資料產生方式
這三種response 分別是 html,rss,json
Q老大:嗯嗯
所以它從controller開始
xxxx_controller.rb
def index
@xxxxs = xxxx.all
respond_to do |format|
format.html
format.json
format.rss
end
end
他的定義差不多是這樣
前面是撈出所有xxxx這個model的資料
然後它怎麼產三種不同的response就是重點啦
看到view這個folder
view{
xxxx{
show.html.erb
show.json.erb
show.rss.builder
}
}
Q老大:@是陣列嗎?
他是用name . type . render的方式,透過folder跟檔案命名
來規範不同的output 所以很有趣
@ 是 instance value
如果沒有@ 就只有在block內有用
他的特性就是可以隨時定義"self"的instance value
Q老大:明白.
主要的差異在於scope :P
Q老大:跟python一樣:$
我覺得這樣還蠻好的 你可以透過檔案的命名就指定你要開builder
還是要開erb (rails template) 還是要開其他的類型
而且各自不會混淆 又很直覺
XD
這是我很驚豔的地方
你可以透過 xxxx/.rss => format.rss
xxxx/.json => format.json
Q老大:差不多花掉了XD
總之 他的link跟行為都有一套規則...一開始進來會很花
但是習慣之後就覺得很直覺XD
-----------------------------------------------------
Q老大:那個絕對值是做什麼用的XD 感覺像 loop
respond_to do |format|
format.html
format.json
format.rss
end
-----------------------------------------------------
那是block 的傳入參數,是一種定義 :P
我想一下喔
[1,2,3,4] .each do |num|
puts num
end
那個 || 只是再說 num 是我的block parameter
上面那東西 會依序把1,2,3,4 當成num傳入
Q老大:所以.. 還是loop orz
啊我想起來了 既不記得我們以前寫groovy會有body
Q老大:那個是 closure
Q老大:list.each {it -> print it}
我想辦法想個 比方XD
剛剛那個有點像是
each (function( num ){ alert(num);})
Q老大:漸漸有懂一點了
我不知道each是幹麼的 我只知道如果你給我num 我就跑
只是each 剛好內容就像是
var ary = [1,2,3,4];
ary.prototype.each = function(fn){
for(var i=0;i<this.length;++i){
fn(this[i]);
}
}
類似這樣
他是一種類似 我們在寫taglib時body的那種作法
只是它叫yield 這是ruby的block 很像closure XD
我的解釋能力差不多就到這了 XDDD
這時間點只能淺嘗:P
總之rails有它優美不受束縛的地方 XD
它跟js 給我的感受差不多,可是他比js還有更多很多的工具
我那天看到一個可以用下css selector的方式做html parser的gem
超驚為天人的啦 XD
你讀進一個純文字的html檔,然後做一次parse成document
就可以做doc.scan("div.name")
去取得所有 <div class="name"></div>的元素 XD
真的是眼睛都亮了
-----------------------------------------------------
哈哈 聊天總是能整理很多訊息,
當試著去表達一些事情時(不論對握),才更能讓自己再一次去反芻...
--
▄▅▆▇███▇▆▅▄▃ ╰┼╯─╮ ╮
◥███████████◣ ╰┼╯=│=│
◥██████───────◣ *. ╯ ╯ ╯ の 物 語 .*
◥███████──────◣ ~ ◢◣ ◢◣
◥██████───────◤ ◥◤* 空白的世界.翼 *◥◤
◥██▁▂▃▄▅▆▇███▆▅▄▃▂▂~telnet://tony1223.no-ip.info
--
▄▅▆▇███▇▆▅▄▃ ╰┼╯─╮ ╮
◥███████████◣ ╰┼╯=│=│
◥██████───────◣ *. ╯ ╯ ╯ の 物 語 .*
◥███████──────◣ ~ ◢◣ ◢◣
◥██████───────◤ ◥◤* 空白的世界.翼 *◥◤
◥██▁▂▃▄▅▆▇███▆▅▄▃▂▂~telnet://tony1223.no-ip.info
--
╭═ Origin ─═ 北極光 aurora.twbbs.org κλμ ─╣
╚─ Author ═─ 111.70.176.130
Replies
0
Likes
0
Reposts
0

Comments

No approved comments yet.