Redirect_to / Render / Render Partial

閱讀時間約 5 分鐘
在 Rails 裡常常可以看到 redirect_to 跟 render,但這兩者到底有什麼差異呢?

Redirect_to

redirect_to 後面接網址路徑,是用來轉到該網址路徑去,也就是換到一個新的頁面。
redirect_to 'https://www.google.com/'
如果在 new 的頁面上
if xxx.save
   (略) 
else
  redirect_to 'new_xxxx_path'
end
針對 save false 時執行轉址,會導致在 new 頁面上原本填寫好的資料,全部都消失不見。
因為他是從原本的 A 頁轉到新的 A 頁,所以在原本的 A 頁填好的資料理所當然就不見了。
(同一條溪流,這一秒的水流跟下一秒的水流是不一樣的水流)

Render

只要使用 render 就能解決上述的狀況!
Render 是渲染的意思。
也就是說,render 會渲染指定的畫面,渲染的意思就是原封不動的重新呈現,原本有什麼就給你看什麼。
如果我們把 redirect_to 轉址,改成 render 渲染:
if xxx.save
   (略) 
else
  render :new
end
他就會去渲染 new.html.erb,那只要你在 new 的 view template 畫面上有什麼就渲染什麼,輸入在表格上的資料就不會消失了。
因為不像轉址是到一個全新的頁面。

Render Partial

Render partial 稱為局部渲染,是 render 的其他功能,它可以把每個內容重複的 view template html.erb 進行整合,將重複的內容,整理到一份命名規則為 _xxxx.html.erb 的檔案裡(第一個底線必備)。
通常在 Rails 裡,new 跟 edit 的 html.erb 會有一樣的表格:
/views/article/new.html.erb
<h1>新增</h1>
<%= form_for @article do |form| %>
    ....(略)
<% end %>
/views/article/edit.html.erb
<h1>編輯</h1>
<%= form_for @article do |form| %>
    ....(略)
<% end %>
我們可以把它們重複的部分(表格),整理到 _form.html.erb 然後讓 new.html.erb 跟 edit.html.erb 去渲染 _form.html.erb:
/views/article/_form.html.erb
<%= form_for @article do |form| %>
    ....(略)
<% end %>
/views/article/new.html.erb
<h1>新增</h1>
    
<%= render 'form' %>
/views/article/edit.html.erb
<h1>編輯</h1>
    
<%= render 'form' %>
如此一來便符合 Ruby 的原則:避免重複。

為何稱為局部渲染?

從上面的範例可以知道,new 跟 edit 並不是把自己所有的畫面都渲染了,而是保留了各自不同的部分:
<h1>新增</h1>
<h1>編輯</h1>
並渲染了局部重複的部分:
<%= form_for @article do |form| %>
    ....(略)
<% end %>

Render Partial 彈性大增

在 render partial 的功能裡,還能夠替每個需要的 html.erb 進行渲染客製化,增加渲染的彈性。
/controller/articles_controller.rb
def create
    @article = Article.new(article_params)
    (略)
end
/views/article/_form.html.erb
<%= form_for article do |form| %>
    ....(略)
<% end %>
/views/article/new.html.erb
<h1>新增</h1>
    
<%= render 'form', article = @article %>
/views/article/edit.html.erb
<h1>編輯</h1>
    
<%= render 'form', article = @article %>
將 render 後面多加一個區域變數,並讓實體變數指向該區域變數,用這個實體變數指向區域變數的方法,好讓每個局部渲染的畫面,都能再另外客製化各自需要的東西。
在 class 裡的 action 底下製作需要的實體變數,然後指向區域變數。
1會員
13內容數
留言0
查看全部
發表第一個留言支持創作者!
Mike的沙龍 的其他內容
Find 輸入一個 id 參數後,尋找相對應的一筆資料。 在 SQL 的部分: 如果 find 找不到相對應的資料時,會跳出兇殘的錯誤訊息: Find_by 輸入一個或多個參數後,找到相對應的一筆資料。 在 SQL 的部分: Where 輸入一個或多個參數後,找到相對應的多筆資料。
避免使用者在資料寫入時,強行新增非官網的資料時,所進行的預設阻擋功能。 所以必須新增一個「白名單」,才能正常寫入: 寫了這段後,除了 permit 的資料,其他額外的資料都會被過濾掉,不會進來。
MVC是一套網頁開發的架構流程,代表著從前端到後端的各自分工。 M: Model 多個 model 建立的 tables 們能夠透過 foreign_key 或是 belongs_to / has_one / has_many,將彼此的資料產生關聯。 V: View C: Controller
直接來看範例吧
  一切的重點就是在利用文字排版與語言解構使程式碼more「readable」   範例如下列網址,有興趣深入了解可進去觀看
1. p1 = Product.new(name:"衛生紙") 接著執行 p1.stores = s1 卻出現 undefined method "each"的錯誤訊息。(如下圖一) 解決方法: 強制給實體掛上store_id 接下來處理Product
Find 輸入一個 id 參數後,尋找相對應的一筆資料。 在 SQL 的部分: 如果 find 找不到相對應的資料時,會跳出兇殘的錯誤訊息: Find_by 輸入一個或多個參數後,找到相對應的一筆資料。 在 SQL 的部分: Where 輸入一個或多個參數後,找到相對應的多筆資料。
避免使用者在資料寫入時,強行新增非官網的資料時,所進行的預設阻擋功能。 所以必須新增一個「白名單」,才能正常寫入: 寫了這段後,除了 permit 的資料,其他額外的資料都會被過濾掉,不會進來。
MVC是一套網頁開發的架構流程,代表著從前端到後端的各自分工。 M: Model 多個 model 建立的 tables 們能夠透過 foreign_key 或是 belongs_to / has_one / has_many,將彼此的資料產生關聯。 V: View C: Controller
直接來看範例吧
  一切的重點就是在利用文字排版與語言解構使程式碼more「readable」   範例如下列網址,有興趣深入了解可進去觀看
1. p1 = Product.new(name:"衛生紙") 接著執行 p1.stores = s1 卻出現 undefined method "each"的錯誤訊息。(如下圖一) 解決方法: 強制給實體掛上store_id 接下來處理Product
你可能也想看
Thumbnail
作家 Morgan Housel 在《華爾街日報》中提出一個觀點:我們是用理解知識的方式在思考、學習金錢觀,而不是用理解心智與行為模式的方式學習理財。這段話讓我意識到,我們的財務決策並非總是理性的,情緒因素也扮演著重要角色。通過掌握金錢心理學,能夠幫助我們改善用錢習慣,使財務決策更為理性和長遠。
Thumbnail
對於第一次墨爾本自由行的人,我很推薦你們選墨爾本中央商業區 Melbourne CBD。這裡是我覺得最理想的墨爾本住宿地點,因為景點很集中、交通十分方便、生活設施也非常豐富,很多墨爾本飯店和公寓酒店都集中在這裡
Thumbnail
連鐵道迷都讚不絕口的日本北陸鐵道旅行團,除了搭乘黑部立山的鐵道之外,剛好又碰上紅葉季,放眼望去享受被紅葉包圍的特殊體驗,非常適合拍照,怎麼拍都有網美的感覺!這麼棒的日本跟團旅遊,就讓AsiaYo幫各位好好介紹一下日本北陸鐵道跟團旅遊的魅力吧~
Thumbnail
想去日本跟團旅遊的朋友們,還沒有決定好要取哪個地方旅遊嗎?那非常推薦各位選擇日本東北賞楓經典跟團!除了可以搭乘纜車欣賞到滿山滿谷的紅葉,日本東北的自然景觀更是一絕!接下來就跟著AsiaYo一起來看看有那些推薦的日本東北優質行程吧~ 🍁東北經典賞楓跟團行程推薦 【東北賞楓】楓染奧入瀨溪、賞楓鐵道
Thumbnail
走走走~又到了大家出國的旺季,你有打算到哪裡出國旅遊嗎~若還沒有想法也沒關係,今天AsiaYo帶來了目前正夯的跟團旅遊,就是我們越南富國島旅行團!在富國島不僅可以體驗潛水的樂趣,搭乘纜車享受一望無際的美麗海景,還有各種主題樂園,不僅小朋友喜愛,連大人也為之瘋狂,究竟富國島魅力何在?就讓AsiaYo來
Thumbnail
來到泰國大家一定想到的泰國潑水節,但泰國除了潑水節,泰國也有許多玩水的經典行程等著大家來體驗喔~為此AsiaYo準備了泰國芭達雅經典玩水熱門跟團行程路線送給大家,這些泰國跟團行除了玩水之餘,也可以體驗到泰國悠久文化~聽到這心動的朋友快跟著AsiaYo尋找喜愛的泰國跟團旅遊吧!
Thumbnail
最近神力女超人的電影要上映了 回顧一下第一集的感動吧 電影的主軸不像Harry Potter一般 一直say love卻始終讓人摸不著頭緒 愛到底哪裡強大 也不像Carol一般 有著明確的議題 在一個明確的大旗底下 深藏許多深情 Wander Woman 彷彿就是講我們自己一樣一樣 小時候 我們
Thumbnail
今天,我想要跟你聊聊「因果關係」的話題。
問我「今年2020為什麼在演講會這麼多的活動參與打卡?」 大學時代,Edward Chen 老師帶著幾位大學生,去參加第一次「toastermaster 吐司達人的會議」我就認識它。而陸陸續續的參與,就是「參與」。很少主動太積極地協辦活動。[忙]就是一向的藉口。 今年被「邀請」「揪」出來擔任區幹部
這陣子學習網路行銷的小小感覺 感覺就是…每天都要做一樣的事情 雖說網路行銷聽起來應該很有趣吧(至少在我學之前,印象是這樣的XD 結果這陣子這樣下來,總覺得在外行眼中看起來很有趣 但是真的做起來,就是每天的To do list每天執行同樣的事情 就很無聊~   像是經營部落格 每天要想著今天要分享什麼
Thumbnail
最近趁著歐洲折扣驚喜購入Bottega Veneta這雙後繫帶鞋。乍看是百貨公司B1很常見的款式,不過細節的處理看得出特色,比方楦頭,恰到好處的比例讓寬腳板可以安心穿上又不失精緻形象,而雲朵般的皺摺繫帶也正好呼應了BV近期主打的pouch包款。整體設計搭配偏灰裸色加倍實穿,工作、休閒都很可以。
Thumbnail
作家 Morgan Housel 在《華爾街日報》中提出一個觀點:我們是用理解知識的方式在思考、學習金錢觀,而不是用理解心智與行為模式的方式學習理財。這段話讓我意識到,我們的財務決策並非總是理性的,情緒因素也扮演著重要角色。通過掌握金錢心理學,能夠幫助我們改善用錢習慣,使財務決策更為理性和長遠。
Thumbnail
對於第一次墨爾本自由行的人,我很推薦你們選墨爾本中央商業區 Melbourne CBD。這裡是我覺得最理想的墨爾本住宿地點,因為景點很集中、交通十分方便、生活設施也非常豐富,很多墨爾本飯店和公寓酒店都集中在這裡
Thumbnail
連鐵道迷都讚不絕口的日本北陸鐵道旅行團,除了搭乘黑部立山的鐵道之外,剛好又碰上紅葉季,放眼望去享受被紅葉包圍的特殊體驗,非常適合拍照,怎麼拍都有網美的感覺!這麼棒的日本跟團旅遊,就讓AsiaYo幫各位好好介紹一下日本北陸鐵道跟團旅遊的魅力吧~
Thumbnail
想去日本跟團旅遊的朋友們,還沒有決定好要取哪個地方旅遊嗎?那非常推薦各位選擇日本東北賞楓經典跟團!除了可以搭乘纜車欣賞到滿山滿谷的紅葉,日本東北的自然景觀更是一絕!接下來就跟著AsiaYo一起來看看有那些推薦的日本東北優質行程吧~ 🍁東北經典賞楓跟團行程推薦 【東北賞楓】楓染奧入瀨溪、賞楓鐵道
Thumbnail
走走走~又到了大家出國的旺季,你有打算到哪裡出國旅遊嗎~若還沒有想法也沒關係,今天AsiaYo帶來了目前正夯的跟團旅遊,就是我們越南富國島旅行團!在富國島不僅可以體驗潛水的樂趣,搭乘纜車享受一望無際的美麗海景,還有各種主題樂園,不僅小朋友喜愛,連大人也為之瘋狂,究竟富國島魅力何在?就讓AsiaYo來
Thumbnail
來到泰國大家一定想到的泰國潑水節,但泰國除了潑水節,泰國也有許多玩水的經典行程等著大家來體驗喔~為此AsiaYo準備了泰國芭達雅經典玩水熱門跟團行程路線送給大家,這些泰國跟團行除了玩水之餘,也可以體驗到泰國悠久文化~聽到這心動的朋友快跟著AsiaYo尋找喜愛的泰國跟團旅遊吧!
Thumbnail
最近神力女超人的電影要上映了 回顧一下第一集的感動吧 電影的主軸不像Harry Potter一般 一直say love卻始終讓人摸不著頭緒 愛到底哪裡強大 也不像Carol一般 有著明確的議題 在一個明確的大旗底下 深藏許多深情 Wander Woman 彷彿就是講我們自己一樣一樣 小時候 我們
Thumbnail
今天,我想要跟你聊聊「因果關係」的話題。
問我「今年2020為什麼在演講會這麼多的活動參與打卡?」 大學時代,Edward Chen 老師帶著幾位大學生,去參加第一次「toastermaster 吐司達人的會議」我就認識它。而陸陸續續的參與,就是「參與」。很少主動太積極地協辦活動。[忙]就是一向的藉口。 今年被「邀請」「揪」出來擔任區幹部
這陣子學習網路行銷的小小感覺 感覺就是…每天都要做一樣的事情 雖說網路行銷聽起來應該很有趣吧(至少在我學之前,印象是這樣的XD 結果這陣子這樣下來,總覺得在外行眼中看起來很有趣 但是真的做起來,就是每天的To do list每天執行同樣的事情 就很無聊~   像是經營部落格 每天要想著今天要分享什麼
Thumbnail
最近趁著歐洲折扣驚喜購入Bottega Veneta這雙後繫帶鞋。乍看是百貨公司B1很常見的款式,不過細節的處理看得出特色,比方楦頭,恰到好處的比例讓寬腳板可以安心穿上又不失精緻形象,而雲朵般的皺摺繫帶也正好呼應了BV近期主打的pouch包款。整體設計搭配偏灰裸色加倍實穿,工作、休閒都很可以。