昨天那樣子寫,是不是會發現怎麼好像都沒有辦法成功?
因為 Rails 有非常強大的安全機制,你丟進去的東西都要經過核准才可以!
這也是 rails 的開發慣例,
中文譯作「強參數」,也可以稱做,「清洗參數」。
為什麼要這麼做呢?
「強參數」是一種安全機制,它可以防止惡意使用者透過操縱參數來執行不安全的操作,
如SQL注入、跨站腳本攻擊等。
可以順便談一下網路攻擊
Cross-site scripting,通常簡稱為:XSS
XSS攻擊通常指的是通過利用網頁開發時留下的漏洞,通過巧妙的方法注入惡意指令代碼到網頁,使使用者載入並執行攻擊者惡意製造的網頁程式。
這些惡意網頁程式通常是JavaScript,但實際上也可以包括Java,VBScript,ActiveX,Flash或者甚至是普通的HTML。
攻擊成功後,攻擊者可能得到更高的權限(如執行一些操作)、私密網頁內容、對談和cookie等各種內容。
簡單來說,就是攻擊者可以偷塞一些惡意的程式碼在表單裡面,
讓他在submit的時候,一起把這些東西寫進資料庫裏面,造成網站的損耗。
所以這個清洗參數的動作就很重要!那我們可以照著現在有的參數去設定
def article_params
params.require(:article).permit(:title, :content)
end
def create
@article = Article.new(article_params)
if @article.save
redirect_to root_path
else
render :new
end
end
接下來,我們就可以回到網站裡,試著建立看看新的文章,
如果順利地跳轉到首頁,我們就成功的讓他存入資料庫了!
那我們要如何知道有沒有成功呢?
我們可以簡單製作一個flash通知,意思就是跳轉過後他會出現,但你再重整就會消失的文字訊息
def create
@article = Article.new(article_params)
if @article.save
redirect_to root_path, notice: '成功!!'
else
render :new, notice: '失敗!!'
end
end
那我們要讓這段文字渲染在畫面上,就要去view裡面呼叫他
這個可以放在view的layout裡面
<body class="m-10">
<%= flash[:notice] %>
<%= yield %>
</body>
yield 就是我們每一個頁面都會被呼叫進來,然後由這裡來呈現,
簡單來說這裡就是view的最上層,所以我把notice放在這裡,
之後如果還有其他地方需要用到它,都可以直接從這裡調用!就不需要在個別單頁裡面去多寫。