over 2 years ago

RailsFun.tw 新手教學 day3 HD

00:01:48

session的生存範圍
route > controller + model > view + helper
網址 -> 先去public找檔案 -> route ->丟404
-> controller / action -> send fild
-> View

00:04:00

model and relation
一個資料如何找到其他額外資料的方式

00:05:00

path的使用

00:07:35

只能用GET(Verb)來到這個網址/hello(.:format)(URI Pattern)
打這個網址/hello會到這個地方去hihi#tester(Controller#Action)
hello(Prefix)是縮寫,在rails裡面可以用,會變成hello_path

00:09:00

as的用法

get "hello", :to => 'hihi#tester' , :as => 'hihihi'

Prefix會從hello變成hihihi
一個rename的動作,跟對外一點關係都沒用,只有內部會變

00:13:00

html.erb裡面打

<%= root_path %> 會變成/
<%= hihihi_path %> 會變成 /hello

00:15:00

yoo GET /yoo/:id(:format) yoo#show
需要id,如果只打<%= yoo_path %>
會出現 missing require keys: [:id]
需要提供id,id 其實就是一個數字

00:16:00

link_toyoo_path其實都是method,也是helper,所以後面都可以加括號

link_to() 
yoo_path()
<%= link_to('go to yoo', yoo_path(1)) %>

1可以是999,也可以是item.first

00:21:00

講collection跟member
collection => 集合體,沒有特定對象,如index
member => 指定特定對象,要有id

00:25:00

match,可以接多個Verb,
match "dog/:id/:type/:meows/:wow", :to => 'nono#meow', via => [:get, :patch, :delete]

00:25:00

W3C規定,a tag裡面只可以有GET,不能有POST跟DELETE
所以rails的做法是寫到method裡面

:method => 'post'

可以送出選單之後,真正發生的情況要看Network。
會看到General,Request跟Responds ,Form DATA

data-method='post'是來自於
application.html.erb
<%= javascript_include_tag 'application'%>
app/assets/javascripts/application.js
要有require jquery_ujs才可以動

00:37:00

FORM HELPER的陷阱
Module ActionView::Helpers::FormHelper
建議用:url

<%= form_for 接model_name :url => kitty2_path, :method => 'delete' do |f|%>
<% end %>

00:44:00

<%= form_for Item.new, :url => Kitty2_path, :method => 'delete' do |f| %>

    <%= f.text_field :name %> 
  => <input id='item_name' name = 'item[name]' type='text' />
  item[name]hash的規則
    
  <input name="single" value="1" />
    <input name="im_array[]" value="2" /> #array是一個一個塞,所以[]裡面不用給他東西

    <input name="im_array[]" value="3" />
    <input name="im_hash[im_key1]" value="?" /> #hash是key by value

    <input name="im_hash[im_key2]" value="!" />

<% end %>
Parameters: {'item'=>{'name' => 'xxxx'}, 'single' => '1', 'im_array' => [2,3], 'im_hash' => {'im_key1' => '?', 'im_key2' => '!'} }

text所有的form helper都在幫忙弄html。
可以自己寫成:

<input id="item_name" name="item[name]" type="radio"/>

不要有f.,就可以自己寫html

<input name = "wtf" />

送出後:
Parameters: {'item'=>{'name' => 'xxxx'}, 'wtf' => 'xxx'}
打params[:item][:name]
params[:wtf]
params[:single]
params[:im_array][1]
params[:im_hash][:key1]

00:52:00

讓傳統的http支援RESTful

jquery_ujs 

00:53:00 檔案做在lib,要到config/application.rb去做require

class hellokitty
end

00:58:00

hello kitty 寫好之後要做require的動作
cd/projectname/config/application.rb
做require

require 'hello_kitty'

(不要有.rb)

剛做好的時候,可以用ruby hello_kitty.rb
require之後,可以用rails c試看看HelloKitty.say

00:59:00用到view裡面去

<%= HelloKitty.say %>
server記得要重開

1:00:00

多重controller
public:外部使用者看得到
dasgboard:用戶看得到
admin:管理員看得到

1:03:00

namespace的定義是

1:06:00

不讓機器人進去
public/robots.txt
User-agent:*
Disallow: /dashboard/
使用者後台不能對外

1:07:00

開始講controller的繼承

class Dashboard::DashboardController < ApplicationController
    before_action :authenticate_user!
end

繼承Dashboard::DashboardController,就不用再before_action :authenticate_user!

Admin重新繼承ApplicationController

class Dashboard::Admin::AdminController < ApplicationController
    before_action :authenticate_manager!
end

要驗證manager才能使用功能

1:12:00

講devise
config/initializers/devise.rb
一定要在,不然不能動

1:17:00

simple captcha
不知道為什麼就噴了,1:22:00到github直接copy code
simple-captcha/lib/generators/templates/migration.rb

class CreateSimpleCaptchaData < ActiveRecord::Migration
  def self.up
    create_table :simple_captcha_data do |t|
      t.string :key, :limit => 40
      t.string :value, :limit => 6
      t.timestamps
    end
    
    add_index :simple_captcha_data, :key, :name => "idx_key"
  end

  def self.down
    drop_table :simple_captcha_data
  end
end

1:25:00

view/simple_captcha/simple_captcha.erb

1:31:00

form_tag <form></form>

專門為@item做的表單:

form_for @item do |f| end

2 key words
搜尋:rails form helper
helpers FormHelper : for @object
helpers FormTagHelper

1:34:00

if simple_captcha_valid?
    @ans = true
else 
    @ans = false
    redirect_to :action => ;index

1:37:00

乾淨的layout
app/view/layouts/application.html.erb

<%= yield %> 之後的網頁都會出現在這個地方
在這頁(application.html.erb)可以加<%= yield :header %>
然後到其它頁面寫:

<% content_for :header do %>
  這邊寫的東西就會出現在剛剛加的地方
<% end %>

1:47:00

開始講email
guides.rubyonrails.org/action_mailer_basics.html
可以視作 mail 的 controller
問題:
送mail的速度很慢。
deliver_now之類的功能,不然要等信寄出去,會卡住。
一定要用inline css<div style="background:#ccf">寫在tag內</div>

1:52:00

流程問題
用javascript把四個頁面整合成一個頁面

1:55:40

什麼是攻擊
mysql data type text

2:15:00

在講A => B(pay) => B auto POST (JavaScript)(連線中請等待) => A

       |===== 6 try =========> A (背景傳送)

       BASE64是編版格式,不是加密格式
← RailsFun.tw 新手教學_day2 HD RailsFun tw 新手教學 day4 HD →