iT邦幫忙

1

Rails基本介紹(一)一個實體 && Remove Duplicates from Sorted Array && Remove Element

  • 分享至 

  • xImage
  •  

慣例
Yes


這篇先解題分享。
怕來不及打完,這樣比較好修改...科科

Remove Duplicates from Sorted Array

題目連結:https://leetcode.com/problems/remove-duplicates-from-sorted-array
重點在於,不產生新陣列,由陣列直接刪除重複數字,且例子有數字連續特性。

# @param {Integer[]} nums
# @return {Integer}
def remove_duplicates(nums)
end
def remove_duplicates(nums)
  #去除陣列中重複的數字,只保留單獨一個
  #回傳新陣列的數值是題目要求的。
end

解題方向也可以用for、while、loop等語法。

黑魔法!

def remove_duplicates(nums)
  nums.uniq!
  nums.size
end

有夠黑...


Remove Element

題目連結:https://leetcode.com/problems/remove-element/
直接由陣列,去除陣列指定數值。

# @param {Integer[]} nums
# @param {Integer} val
# @return {Integer}

def remove_element(nums, val)
  #刪除陣列內指定值
  #回傳陣列長度(資料數)
end

#重點在於,不能用多一個array去運算,例如
nums - [val]
2.7.3 :063 > x = [1, 2, 4, 5] 
 => [1, 2, 4, 5] 
2.7.3 :064 > y = [2]
 => [2] 
2.7.3 :065 > x-y
 => [1, 4, 5] 

這邊也先直接黑魔法下去。

def remove_element(nums, val)
  nums.delete(val) 
  return nums.size
end

這兩題擺在一起,其實是因為有相同邏輯可以去用,什麼指針式,雙指針。

Ruby的優點在於很多語法對於資料(陣列,雜湊),處理得非常完善,這些語法當然也是由許多邏輯經過良好的封裝完成的。

有人說新手學Ruby很難,因為太多黑魔法,這點真的無法否認。像我這個菜鳥,學習初期真的很想了解這些黑魔法的運作原理,但CP值真的太低了,學怎麼用比較實在,但是邏輯能懂還是要能懂,在遇到沒有黑魔法時,才解得出來。

待分享:指針演算法?


一個實體

實體就是一堆資料的集合體,通常招喚一個實體,會看到的是一雜湊。
首先Rails new一個專案,之後我們直接先做一個modle與一個controller

請確定終端機指令介面有到正確的資料夾。

$rails new test1212

test1212是專案名稱,專案名稱請隨意。
但注意專案名稱盡量不要取得與未來你會用到的model、controller、table名稱相同。

$ rails greate model model_name

我model_name用role,應該會看到類似資料回傳.

Running via Spring preloader in process 85403
      invoke  active_record
      create    db/migrate/20210811102936_create_roles.rb
      create    app/models/role.rb
      invoke    test_unit
      create      test/models/role_test.rb
      create      test/fixtures/roles.yml
create部分告知你創建了哪些資料,可以先停下看看資料夾多了哪些檔案,test部分請先跳過。
這是用指令方式創建,也可以手動輸入。(test很重要,重要到我不會XD)

有model不一定會有資料表(不一定有實體),也有可能一個model會有許多張資料表。
接著我們先執行做出資料庫

$ rails db:migrate
== 20210811102936 CreateRoles: migrating ======================================
-- create_table(:roles)
   -> 0.0012s
== 20210811102936 CreateRoles: migrated (0.0012s) =============================

這代表著我們開始可以將由Role這個model建立出來的實體有地方放了。

待分享:測試,TDD

待分享:DB,SQL

migration這項,及使用rails greate model或rails greate model指令帶參數時的注意事項不做分享,請看好書為你自己學Ruby on Rails
但請注意,一般用指令時,g model會順便建立table,g migration不會順便建立model。

接下來另一個指令

$ rails c
$ rails c --sandbox

不講專有名詞,就是rails的irb,sanbox指沙盒模式,隨你玩,不會真的存檔。
進入後

2.7.3 :001 > player = Role.new
   (0.9ms)  SELECT sqlite_version(*)
  TRANSACTION (0.1ms)  begin transaction
 => #<Role id: nil, created_at: nil, updated_at: nil> 
 
2.7.3 :002 > player = Role.create
  TRANSACTION (0.2ms)  SAVEPOINT active_record_1
  Role Create (1.2ms)  INSERT INTO "roles" ("created_at", "updated_at") VALUES (?, ?)  [["created_at", "2021-08-11 13:04:04.122577"], ["updated_at", "2021-08-11 13:04:04.122577"]]
  TRANSACTION (0.1ms)  RELEASE SAVEPOINT active_record_1
 => #<Role id: 3, created_at: "2021-08-11 13:04:04.122577000 +0000", updated_at: "2021-08... 

你的畫面可能跟我長得不一樣,但請觀察new與create這兩個指令的差異。

為何書上都有的,我還這樣打一遍,因為我初學時,rails c跟irb傻傻分不清楚,還有以為rails後一定也要建立controller與view才可以建立實體。

整理一下Role.create出來的實體

player = {
  id: 3, 
  create_at: "2021-08-11 13:04:04.122577000 +0000",
  updated_at: "2021-08-11 13:04:04.122577" 
}

實體其實就是一堆資料,電腦傳輸的是一堆資料。


下篇繼續說明:怎麼用人看得懂的方式處理實體。(講完等於講完MVC了?)
網路上的好資料:Rails指令集


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言