第二版针对的是rails1.2版本,而我入手已经是2.2了,差别很大,这里记下我所遇到的问题。
1、数据库连接。
书中例子Depot使用的MySQL版本为5.0,而我最初使用的是5.1版本,始终无法正常连接,后来尝试Postgresql8.3,再次失败,最后卸载MySQL5.1,安装5.0版本搞定。
2、scaffold在rails2.2中的问题
查得scaffold在Rails2.0时就不再提供,而需要通过插件install,但是我install后继续有问题。参考了http://jkfzero.iteye.com/blog/284774中的内容,看来动态使用暂时搞不定,于是用文章中提到的办法,静态使用scaffold来创建model,control and helper,要注意的是,之前的东西要清理干净,包括表格,helper,不然使用时还是会有问题,最后还必须执行一次rake db:migrate,不然在new操作时是会报错的。针对这个问题,国外的论坛上是建议将rails的版本回退到1.2.6,如果再遇到类似的问题,我只好这样做了-_-#.
ps: 回退rails版本的方法,执行gem uninstall rails卸载,执行gem install rails --version 1.2.6安装特定版本。
3、添加price字段
按照书中的操作可以改变db中表格结构,但是浏览器刷新后,貌似scaffold并没有被重新执行,毕竟是静态的嘛,所以要修改scaffold生成的代码,浏览了下control,model,views,发现views和表结构相关,修改所有的erb文件,依葫芦画瓢就可以了:)
4、迭代A4中有涉及静态scaffold和动态scaffold的内容
5、optimize list view的html有不支持的地方,下面这段有问题,先掠过:
<%= if @product_pages.current.previous link_to("Previous page", { :page => @product_pages.current.previous }) end %> <%= if @product_pages.current.next link_to("Next page", { :page => @product_pages.current.next }) end %>
6、destroy 链接构造不正确。
书上的代码是
<%= link_to 'Destroy', { :action => 'destroy', :id => product }, :confirm => "Are you sure?", :method => :post %>
构造出来类似"http://127.0.0.1:3000/products/9",正确的应该形似"http://127.0.0.1:3000/products/9/destroy",查阅了API guide,正确的写法是:
<%= link_to 'Destroy', {:action => 'destroy', :id => product }, :confirm => "Are you sure?", :method => :delete %>
7、创建购物车的例子cart,会有异常ActionController::InvalidAuthenticityToken,因为2.0+的版本的新加控制( ensuring that all forms are coming from the current web application, not a forged link from another site),见http://api.rubyonrails.org/classes/ActionController/RequestForgeryProtection/ClassMethods.html,我们需要在enviroment.rb中新加一条config.action_controller.allow_forgery_protection = false去disable它。
8、Ajax初始那个例子,如下,要去掉等号才正确,不然有compile error
<% form_remote_tag :url=> { :action=>:add_to_cart,:id=>product } do %> <%= submit_tag "Add to cart" %> <% end %>
9、Ajax初体验中,FF3不需要后续调整就能有ajax的效果了,而IE还是需要加上诸如以下的附加代码以及rjs
<%= javascript_include_tag :defaults %>
10、回退db可以执行 rake db:migrate VERSION=20081212103700类似的cli,复杂点的话还要配以删除table的方式。
11、TODO