Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Ruby on Rails (the cool parts)
Search
Baylor Rae'
January 08, 2013
Programming
2
120
Ruby on Rails (the cool parts)
This is a presentation I gave that goes over "some" of the cool parts of Ruby on Rails.
Baylor Rae'
January 08, 2013
Tweet
Share
Other Decks in Programming
See All in Programming
DataformでPythonする / dataform-de-python
snhryt
0
160
バイブスあるコーディングで ~PHP~ 便利ツールをつくるプラクティス
uzulla
1
330
Comparing decimals in Swift Testing
417_72ki
0
170
React は次の10年を生き残れるか:3つのトレンドから考える
oukayuka
41
16k
The State of Fluid (2025)
s2b
0
110
マイコンでもRustのtestがしたい その2/KernelVM Tokyo 18
tnishinaga
2
1.8k
Amazon Q CLI開発で学んだAIコーディングツールの使い方
licux
3
180
SwiftでMCPサーバーを作ろう!
giginet
PRO
2
230
リッチエディターを安全に開発・運用するために
unachang113
1
360
なぜあなたのオブザーバビリティ導入は頓挫するのか
ryota_hnk
5
580
Constant integer division faster than compiler-generated code
herumi
2
560
ZeroETLで始めるDynamoDBとS3の連携
afooooil
0
150
Featured
See All Featured
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
36
2.5k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
131
19k
The Language of Interfaces
destraynor
158
25k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
Navigating Team Friction
lara
188
15k
Optimising Largest Contentful Paint
csswizardry
37
3.4k
What's in a price? How to price your products and services
michaelherold
246
12k
The Cost Of JavaScript in 2023
addyosmani
51
8.8k
Documentation Writing (for coders)
carmenintech
73
5k
Why Our Code Smells
bkeepers
PRO
337
57k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
50
5.5k
Transcript
3VCZPO3BJMT the cool parts ( )
8IBU`T$PPM "CPVU3BJMT %BUBCBTF.BOBHFNFOU 5IF"TTFU1JQFMJOF #VJMEJOH8FC'PSNT
%BUBCBTF.BOBHFNFOU http://bit.ly/rails-migrations %POFXJUI3BJMT.JHSBUJPOT w"MMDIBOHFTBSFDSFBUFEJOB3VCZpMF w%BUBCBTF"HOPTUJD w4ZODISPOJ[F&OWJSPONFOUT
%BUBCBTF.BOBHFNFOU http://bit.ly/rails-migrations $ rails g model Product title:string description:text price:decimal
db/migrate/2013010801384833_create_products.rb
%BUBCBTF.BOBHFNFOU http://bit.ly/rails-migrations $ rails g model Product title:string description:text price:decimal
db/migrate/2013010801384833_create_products.rb
%BUBCBTF.BOBHFNFOU http://bit.ly/rails-migrations class CreateProducts < ActiveRecord::Migration def up create_table :products
do |t| t.string :title t.text :description t.decimal :price t.timestamps end end def down drop_table :products end end
%BUBCBTF.BOBHFNFOU http://bit.ly/rails-migrations class CreateProducts < ActiveRecord::Migration def change create_table :products
do |t| t.string :title t.text :description t.decimal :price t.timestamps end end end
%BUBCBTF.BOBHFNFOU http://bit.ly/rails-migrations 1. add_column 2. add_index 3. change_column 4. change_table
5. create_table 6. drop_table 7. remove_column 8. remove_index 9. rename_column
%BUBCBTF.BOBHFNFOU http://bit.ly/rails-migrations 1. add_column :table_name, :column_name, :type 2. add_index, :table_name,
:column_name 3. change_column :table_name, :column_name, :type 4. change_table :table_name, options = {} 5. create_table :table_name, options = {} 6. drop_table :table_name 7. remove_column :table_name, *columns 8. remove_index :table_name, *columns 9. rename_column :table_name, :old_name, :new_name
%BUBCBTF.BOBHFNFOU http://bit.ly/rails-migrations $ rails g migration add_category_id_to_products category_id:integer db/migrate/2013010801448284_add_category_id_to_products.rb
%BUBCBTF.BOBHFNFOU http://bit.ly/rails-migrations class AddCategoryIdToProducts < ActiveRecord::Migration def change add_column :products,
:category_id, :integer end end
%BUBCBTF.BOBHFNFOU http://bit.ly/rails-migrations $ rake db:migrate
%BUBCBTF.BOBHFNFOU http://bit.ly/rails-migrations $ rake db:migrate == CreateProducts: migrating ================================================= --
create_table(:products) -> 0.0055s == CreateProducts: migrated (0.0056s) ======================================== == AddCategoryIdToProducts: migrating ======================================== -- add_column(:products, :category_id, :integer) -> 0.0015s == AddCategoryIdToProducts: migrated (0.0016s) ===============================
%BUBCBTF.BOBHFNFOU http://bit.ly/rails-migrations db/schema.rb ActiveRecord::Schema.define(:version => 2013010801448284) do create_table "products", :force
=> true do |t| t.string "title" t.text "description" t.decimal "price" t.datetime "created_at", :null => false t.datetime "updated_at", :null => false t.integer "category_id" end end
%BUBCBTF.BOBHFNFOU http://bit.ly/rails-migrations $ rake db:schema:load
%BUBCBTF.BOBHFNFOU http://bit.ly/rails-migrations %POFXJUI3BJMT.JHSBUJPOT w"MMDIBOHFTBSFDSFBUFEJOB3VCZpMF w%BUBCBTF"HOPTUJD w4ZODISPOJ[F&OWJSPONFOUT
w1VMMTpMFTGSPNNVMUJQMFMPDBUJPOTJOUPPOF w3FNPWFTBl+VOL%SBXFSzPG+BWBTDSJQUpMFT w$PNQJMFTBOE$PNQSFTTFTUIFpMFT w"EETBCFUUFSDBDIFJOHTZTUFN 5IF"TTFU1JQFMJOF http://bit.ly/asset-pipeline
5IF"TTFU1JQFMJOF javascripts !"" bootstrap-dropdown.js !"" bootstrap-modal.js !"" bootstrap-popover.js !"" bootstrap-typeahead.js
!"" content-tabs.js !"" lightbox.js !"" jquery-ui.js !"" jquery-ui.progress-bar.js !"" jquery.anything-slider.js !"" navigation-tabs.js #"" site.js http://bit.ly/asset-pipeline
5IF"TTFU1JQFMJOF OFVTSBNCMJOHTCMPHTQPUDPN http://bit.ly/asset-pipeline
5IF"TTFU1JQFMJOF javascripts !"" bootstrap-dropdown.js !"" bootstrap-modal.js !"" bootstrap-popover.js !"" bootstrap-typeahead.js
!"" content-tabs.js !"" lightbox.js !"" jquery-ui.js !"" jquery-ui.progress-bar.js !"" jquery.anything-slider.js !"" navigation-tabs.js #"" site.js http://bit.ly/asset-pipeline
. !"" app $ #"" assets $ !"" javascripts $
#"" stylesheets !"" lib $ #"" assets $ !"" javascripts $ #"" stylesheets #"" vendor #"" assets !"" javascripts #"" stylesheets 5IF"TTFU1JQFMJOF http://bit.ly/asset-pipeline
5IF"TTFU1JQFMJOF http://bit.ly/asset-pipeline app/assets/js lib/assets/js vendor/assets/js !"" content-tabs.js #"" navigation-tabs.js !""
bootstrap $ !"" dropdown.js $ !"" modal.js $ !"" popover.js $ #"" typeahead.js !"" bootstrap.js !"" lightbox.js !"" jquery-ui.js !"" jquery-ui.progress-bar.js #"" jquery.anything-slider.js #"" site.js
5IF"TTFU1JQFMJOF http://bit.ly/asset-pipeline app/assets/js lib/assets/js vendor/assets/js !"" content-tabs.js #"" navigation-tabs.js !""
bootstrap $ !"" dropdown.js $ !"" modal.js $ !"" popover.js $ #"" typeahead.js !"" bootstrap.js !"" lightbox.js !"" jquery-ui.js !"" jquery-ui.progress-bar.js #"" jquery.anything-slider.js #"" site.js
5IF"TTFU1JQFMJOF http://bit.ly/asset-pipeline //= require bootstrap/dropdown //= require bootstrap/modal //= require
bootstrap/popover //= require bootstrap/typeahead CPPUTUSBQKT
5IF"TTFU1JQFMJOF http://bit.ly/asset-pipeline . #"" app #"" assets !"" javascripts/ #""
stylesheets/ application.js application.css
. #"" app #"" assets !"" javascripts/ #"" stylesheets/ 5IF"TTFU1JQFMJOF
application.js application.css http://bit.ly/asset-pipeline
5IF"TTFU1JQFMJOF //= require jquery //= require jquery_ujs //= require bootstrap
//= require_tree . /* *= require jquery-ui/datepicker *= require_self *= require_tree . */ application.js application.css http://bit.ly/asset-pipeline
5IF"TTFU1JQFMJOF http://bit.ly/asset-pipeline <%= javascript_include_tag "application" %>
5IF"TTFU1JQFMJOF
5IF"TTFU1JQFMJOF $ rake assets:precompile http://bit.ly/asset-pipeline
5IF"TTFU1JQFMJOF $ rake assets:precompile . #"" app #"" assets !""
javascripts/application.js #"" stylesheets/application.css http://bit.ly/asset-pipeline
5IF"TTFU1JQFMJOF public #"" assets !"" application-1b13569e9620782f423d4cd3ce931750.css !"" application-1b13569e9620782f423d4cd3ce931750.css.gz !"" application-32ed6ebaba49211fc69e08f40c7b97c4.js
!"" application-32ed6ebaba49211fc69e08f40c7b97c4.js.gz !"" application.css !"" application.css.gz !"" application.js !"" application.js.gz !"" manifest.yml !"" rails-a3386665c05a2d82f711a4aaa72d247c.png #"" rails.png http://bit.ly/asset-pipeline
5IF"TTFU1JQFMJOF public #"" assets !"" application-1b13569e9620782f423d4cd3ce931750.css !"" application-1b13569e9620782f423d4cd3ce931750.css.gz !"" application-32ed6ebaba49211fc69e08f40c7b97c4.js
!"" application-32ed6ebaba49211fc69e08f40c7b97c4.js.gz !"" application.css !"" application.css.gz !"" application.js !"" application.js.gz !"" manifest.yml !"" rails-a3386665c05a2d82f711a4aaa72d247c.png #"" rails.png http://bit.ly/asset-pipeline
5IF"TTFU1JQFMJOF public #"" assets !"" application-1b13569e9620782f423d4cd3ce931750.css !"" application-1b13569e9620782f423d4cd3ce931750.css.gz !"" application-32ed6ebaba49211fc69e08f40c7b97c4.js
!"" application-32ed6ebaba49211fc69e08f40c7b97c4.js.gz !"" application.css !"" application.css.gz !"" application.js !"" application.js.gz !"" manifest.yml !"" rails-a3386665c05a2d82f711a4aaa72d247c.png #"" rails.png http://bit.ly/asset-pipeline
5IF"TTFU1JQFMJOF <%= javascript_include_tag "application" %> <script src="/assets/application-32ed6eb...c7b97c4.js"></script> http://bit.ly/asset-pipeline
5IF"TTFU1JQFMJOF http://bit.ly/asset-pipeline
5IF"TTFU1JQFMJOF $ rake assets:precompile http://bit.ly/asset-pipeline
w1VMMTpMFTGSPNNVMUJQMFMPDBUJPOTJOUPPOF w3FNPWFTBl+VOL%SBXFSzPG+BWBTDSJQUpMFT w$PNQJMFTBOE$PNQSFTTFTUIFpMFT w"EETBCFUUFSDBDIFJOHTZTUFN 5IF"TTFU1JQFMJOF http://bit.ly/asset-pipeline
w$POWFOUJPOPWFS$POpHVSBUJPO w*OUFHSBUFTOJDFMZXJUI"DUJWF3FDPSE w#VJMEDPNQMFYGPSNT #VJMEJOH8FC'PSNT http://bit.ly/rails-forms
#VJMEJOH8FC'PSNT http://bit.ly/rails-forms Product.new({ :title => "Cheese Crackers", :price => 3.99
})
#VJMEJOH8FC'PSNT http://bit.ly/rails-forms Product.new(:title => "Cheese Crackers", :price => 3.99)
#VJMEJOH8FC'PSNT http://bit.ly/rails-forms <form action="/products" method="post"> <!-- title --> <label for="title">Title</label>
<input type="text" name="title" id="title" /> <!-- price --> <label for="price">Price</label> <input type="number" name="price" id="price" /> <!-- doo wop --> <input type="submit">Create Product</input> </form>
#VJMEJOH8FC'PSNT http://bit.ly/rails-forms <%= form_for Product.new do |f| %> <!-- title
--> <%= f.label :title %> <%= f.text_field :title %> <!-- price --> <%= f.label :price %> <%= f.number_field :price %> <!-- doo wop --> <%= f.submit %> <% end %>
#VJMEJOH8FC'PSNT http://bit.ly/rails-forms <!-- title --> <label for="product_title">Title</label> <input type="text" name="product[title]"
id="product_title" /> <!-- price --> <label for="product_price">Price</label> <input type="number" name="product[price]" id="product_price" />
#VJMEJOH8FC'PSNT http://bit.ly/rails-forms <!-- title --> <label for="product_title">Title</label> <input type="text" name="product[title]"
id="product_title" /> <!-- price --> <label for="product_price">Price</label> <input type="number" name="product[price]" id="product_price" />
#VJMEJOH8FC'PSNT http://bit.ly/rails-forms params[:product]
#VJMEJOH8FC'PSNT http://bit.ly/rails-forms params[:product] # {:title=>"My Product", :price=>12.5}
#VJMEJOH8FC'PSNT http://bit.ly/rails-forms params[:product][:title] # "My Product" params[:product] # {:title=>"My Product",
:price=>12.5}
#VJMEJOH8FC'PSNT http://bit.ly/rails-forms Product.new(:title => "My Product", :price => 12.5)
#VJMEJOH8FC'PSNT http://bit.ly/rails-forms # POST /products def create @product = Product.new(params[:product])
end
#VJMEJOH8FC'PSNT http://bit.ly/rails-forms lTUSPOHQBSBNFUFSTz github.com/rails/strong_parameters
#VJMEJOH8FC'PSNT http://bit.ly/rails-forms class ProductsController < ApplicationController # POST /products def
create @products = Product.new(product_params) end private def product_params params.require(:product).permit(:title, :price) end end
#VJMEJOH8FC'PSNT http://bit.ly/rails-forms
#VJMEJOH8FC'PSNT http://bit.ly/rails-forms # product_variation.rb class ProductVariation belongs_to :product end
#VJMEJOH8FC'PSNT http://bit.ly/rails-forms # product.rb class Product has_many :product_variations end
#VJMEJOH8FC'PSNT http://bit.ly/rails-forms <%= form_for @product do |f| %> <ul> <%=
f.fields_for :product_variations do |builder| %> <li> <%= builder.label :title %> <%= builder.text_field :title %> <br /> <%= builder.label :price, "$" %> <%= builder.number_field :price %> </li> <% end %> </ul> <% end %>
#VJMEJOH8FC'PSNT http://bit.ly/rails-forms
#VJMEJOH8FC'PSNT http://bit.ly/rails-forms # product.rb class Product has_many :product_variations accepts_nested_attributes_for :product_variations,
:reject_if => lambda { |a| a[:title].blank? } end
w$POWFOUJPOPWFS$POpHVSBUJPO w*OUFHSBUFTOJDFMZXJUI"DUJWF3FDPSE w#VJMEDPNQMFYGPSNT #VJMEJOH8FC'PSNT http://bit.ly/rails-forms