1.ruby script/generate controller store index 创建控制器Store,其中包含action方法index,当调用一个控制器,又没有明确指定action,会默认调用index
2.编辑app/controllers/store_controller.rb,向模型类Product请求数据库表products
class
StoreController
<
ApplicationController
def index
@products = Product . find_products_for_sale
end
end
def index
@products = Product . find_products_for_sale
end
end
编辑app/models/product.rb,添加find_products_for_sale方法
class
Product
<
ActiveRecord
::
Base
validates_presence_of : title ,: description ,: image_url
validates_numericality_of : price
validates_uniqueness_of : title
validates_format_of : image_url ,
: with =>% r{\ . (gif | jpg | png)$}i ,
: message => " must be a URL for a GIF,JPG, or PNG image "
protected
def validate
errors . add( : price , " should be at least 0.01 " ) if price . nil ?|| price < 0.01
end
def self . find_products_for_sale
find( : all ,: order => " title " )
end
end
validates_presence_of : title ,: description ,: image_url
validates_numericality_of : price
validates_uniqueness_of : title
validates_format_of : image_url ,
: with =>% r{\ . (gif | jpg | png)$}i ,
: message => " must be a URL for a GIF,JPG, or PNG image "
protected
def validate
errors . add( : price , " should be at least 0.01 " ) if price . nil ?|| price < 0.01
end
def self . find_products_for_sale
find( : all ,: order => " title " )
end
end
3.编辑app/views/store/index.rhtml,编写视图模板
<
h1
>
Your Pragmatic Catalog
</
h1
>
<% for product in @products - %>
< div class ="entry" >
< img src ="<%=product.image_url %>" />
< h3 > <% = h(product.title) %> < h3 >
<% = product.description %>
< div class ="price" > <% = number_to_currency(product.price) %> </ div >
<% = button_to " Add to Cart " ,:action => :add_to_cart,:id => product %>
</ div >
<% end %>
<% for product in @products - %>
< div class ="entry" >
< img src ="<%=product.image_url %>" />
< h3 > <% = h(product.title) %> < h3 >
<% = product.description %>
< div class ="price" > <% = number_to_currency(product.price) %> </ div >
<% = button_to " Add to Cart " ,:action => :add_to_cart,:id => product %>
</ div >
<% end %>
4.创建app/views/layout/store.rhtml,添加页面布局,如果在app/views/layout目录中创建了一个与某个控制器同名的模板文件,那么该控制器所渲染飞视图默认会使用此布局模板
<!
DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< html xmlns ="http://www.w3.org/1999/xhtml" xml:lang ="en" lang ="en" >
< head >
< title > Pragprog Books Online Store </ title >
<% = stylesheet_link_tag ' depot' ,:media=>"all"%>
</ head >
< body id = " store " >
< div id = " banner " >
< img src = " /images/logo.png " />
< % = @page_title || " Pragmatic Bookshelf " %>
</ div >
< div id ="columns" >
< div id ="side" >
< a href ="http://www...." > Home </ a >< br />
< a href ="http://www..../faq" > Question </ a >< br />
< a href ="http://www..../news" > News </ a >< br />
< a href ="http://www..../contact" > Contact </ a >< br />
</ div >
< div id ="main" >
<% = yield:layout %>
</ div >
</ div >
</ body >
</ html >
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< html xmlns ="http://www.w3.org/1999/xhtml" xml:lang ="en" lang ="en" >
< head >
< title > Pragprog Books Online Store </ title >
<% = stylesheet_link_tag ' depot' ,:media=>"all"%>
</ head >
< body id = " store " >
< div id = " banner " >
< img src = " /images/logo.png " />
< % = @page_title || " Pragmatic Bookshelf " %>
</ div >
< div id ="columns" >
< div id ="side" >
< a href ="http://www...." > Home </ a >< br />
< a href ="http://www..../faq" > Question </ a >< br />
< a href ="http://www..../news" > News </ a >< br />
< a href ="http://www..../contact" > Contact </ a >< br />
</ div >
< div id ="main" >
<% = yield:layout %>
</ div >
</ div >
</ body >
</ html >