[v] #003 Strong Parameters

學 Rails 半年了,半年前剛接觸這些主題時,只能透過 google 到的生冷名詞解釋來理解;半年後,許多踩雷的痛轉換成一點點經驗值,而能夠在每篇的最後寫上個人小小的心得,做為學習成果的驗收。

這是第 003 篇

strong parameters 是什麼?

Rails內建的一個安全機制,限制 parameters 參數寫入 database 中。

為什麼我們要用 strong parameters?

由於 Rails 中 model 的欄位直接對應 database 中 form 的欄位,因此容易被猜到關鍵欄位的命名方式而被駭,透過strong parameters 設定白名單,白名單內的欄位才能被寫入值,就能避免被暴力猜出命名方式後被寫參數進 database, 進而避免被駭。

如何使用 strong parameters?

class Admin::ProductsController < ApplicationController

  def create
    @product = Product.new(product_params)
  end
  
  def update
    @product = Product.find(params[:id])
    
    if @product.update(product_params)
      redirect_to admin_products_path
    else
      render :edit
    end  
  end
  
  private
  
  def product_params
    params.require(:product).permit(:title, :description)
  end
  
end

[v] 如何在 Rails 中使用 jQuery UI?

在介紹 jquery-ui-rails 前,我們先來了解什麼是 jQuery UI, 以及它能做到什麼。最簡單的理解方式其實是點進去下方連結,點選左側欄位自己試試看:

https://jqueryui.com/

而 jquery-ui-rails 就是一個讓 rails 能跑 jquery ui 的 gem

https://github.com/joliss/jquery-ui-rails

Gemfile

gem 'jquery-ui-rails'

Require Everything

application.css

/*
 *= require jquery-ui
 */

application.js

//= require jquery-ui

Require Specific Modules

The jQuery UI code weighs 51KB (minified + gzipped) and takes a while to execute, so for production apps it's recommended to only include the modules that your application actually uses. Dependencies are automatically resolved. Simply pick one or more modules from the asset list below.

application.css

/*
 *= require jquery-ui
 */

application.js

//= require jquery-ui

[v] #002 routing 的 namespace

學 Rails 半年了,半年前剛接觸這些主題時,只能透過 google 到的生冷名詞解釋來理解;半年後,許多踩雷的痛轉換成一點點經驗值,而能夠在每篇的最後寫上個人小小的心得,做為學習成果的驗收。

這是第 002 篇

什麼是 routing?

給 Rails 設路徑,讓 Rails 能依著路徑去執行在 controller 中的 action, 而這也就是 MVC 的精神。

namespace 是什麼?

比如今天有好幾個人都叫金城武,我是板橋金城武,你是億載金城武,板橋、億載就是 namespace, 我們透過 namespace 做出區隔,別人不會搞混。

如何使用 namespace?

terminal
$ rails g controller admin::products
routes.rb
namespace :admin do
  resources :products
end

個人心得

即使我們用 $ rails g controller admin::products 產生了 admin/products_controller 了,還是要去 routes.rb 手動做 routing.

參考資料

http://guides.rubyonrails.org/routing.html 2.6