Ruby on Rails Controller

第 1 步 - 新增 Route
别忘了,使⽤者想要看到你网站上的内容,第⼀步是要问过 Route,所以我们先在
Route 上简单的加上⼀条:

Rails.application.routes.draw do
get "/hello_world", to: "pages#hello"
resources :posts
12 Controller
169
resources :users
end

当使⽤者输入 /hello_world 网址的时候,会交给 PagesController 的
hello ⽅法处理。(是的,其实网址跟 Controller 上的 Action 不⼀定要同名)
第 2 步 - 把⽂字印出来吧!
有了 Route 之後,接下来回到 Controller 把 hello 这个 Action 加上去:

class PagesController < ApplicationController
def hello
render plain: "<h1>你好,世界!</h1>"
end
end

在 hello ⽅法里要把⽂字输出到浏览器上,不是使⽤ return 也不是使⽤
puts ,⽽是使⽤ render ⽅法,後⾯的 plain 参数是指要输出⼀个⼀般的⽂
字内容到画⾯上。
有些刚开始学 Rails 的新朋友可能会想这样做:

class PagesController < ApplicationController
def hello
render plain: "<h1>你好,世界!</h1>"
puts "---- 你好 ----"
end
end

使⽤ puts ⽅法把资料直接输出在画⾯上,看起来很直觉,但这样不会有效果。事
实上并不是 puts ⽅法不能⽤,它的确可以把东⻄印出来,只是不是印在浏览器上
给你看到,⽽是印在 Rails 的 log 里,仔细看⼀下正在执⾏ rails server 的那个
画⾯是不是有这样的东⻄:

第 3 步 - 把⼯作交给 View 吧
虽然在第 2 步可以直接在 Controller 的 Action 里透过 render ⽅法把资料输出在
画⾯上,但如果遇到比较复杂的 HTML 通常就不会⽤这个⽅式了。在 Controller 里
的 Action,如果没有特别指定 render ⽅法或参数,它会到 app/views/ 的⽬录
找「 Controller 名字」⽬录里的 Action 同名档案。以这个例⼦来说,它会去找
app/views/pages/hello.html.erb 。
如果这个 hello.html.erb 档案不存在,就⾃⼰⼿动建⼀个吧。既然输出的事情
交给 View,那原来 hello 这个 Action 的 render ⽅法就可以拿掉:

class PagesController < ApplicationController
12 Controller
171
def hello
end
end

就这样空空的,然後编辑 app/views/pages/hello.html.erb

<h1>你好,世界</h1>
<h2>我是设计师也看得懂的档案喔</h2>

重新整理,应该就会看到跟刚才的差别:
这样的好处是不⽤把 HTML 都写在 Controller 里(实务上也很少⼈真的会这麽
做),再来就是要跟设计师合作的时候也比较⽅便。

参考资料

[为你自己学Ruby on Rails]https://railsbook.tw/chapters/08-ruby-basic-4.html


<<:  Day 1. Pre-Start × 微前言

>>:  Day 01:新手视角

DAY17-JAVA的继承(4)

getClass() 想知道某个物件属於哪个类别时,可用 obj.getClass() //取得变数...

Day18 page fault, LRU, second chance

前言 前几天我们讲到的都是关於虚拟记忆体的资讯,包含VMA的结构,malloc() , mmap()...

Day-06 始於足下:基本语法、陈述句与宣告

至此,常见的JavaScript资料型别已具列完毕,行将踏出实作的步伐。在此之前,再就三个部份进行一...

Day 02: JavaScript 与 物件导向程序设计

物件导向程序设计是什麽? 英文原文:Object-oriented programming,简称 O...

Day22-Vuex简介

终於到了vuex拉!! Day10时有说之後要来研究,没想到这一天这麽快就到来,那就进入正题吧。 为...