《Web开发敏捷之道》学习手记

第二版针对的是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

 

你可能感兴趣的:(Ajax,Web,敏捷开发,IE,Rails)