Rails学习笔记(4)

继续学习Rails,以下是学习Agile Web Development with Rails (4th edition)中遇到的问题、其相应的解决方法和个人的一些理解和体会。
接 Rails学习笔记(3) http://menghuadong.weebly.com/3/post/2013/01/rails3.html

  • 关于git的使用(update)
1 git add .
2 git commit -m 'message about this commit'
3 /*上面两句可合并为 git -a -m 'message about this commit' */
4 git remote add origin https://github.com/user/pro_name.git
5 git push origin master   
如果在执行git remote add origin https://github.com/user/pro_name.git,出现如下错误,
fatal: remote origin already exists
则执行:git remote rm origin
再往后执行 git remote add origin https://github.com/user/pro_name.git即可

如果在执行git push origin master时,出现如下错误,
error:failed to push som refs to.......
则执行以下语句:
git pull origin master(先把远程服务器github上面的文件拉下来,再push 上去)

  • 书上的一些问题 IterationD in Task D                  
按照书上的代码进行coding后,运行会出现如下错误:
图片
 
按照上面的显示是不能对受保护的变量product进行mass-assign(块赋值)
解决办法如下:
 1 @line_item = @cart.line_items.build(:product => product)
 2 //改为 
 3 @line_item = @cart.line_items.build(:product_id => product.id) 
 4 //或是改为
 5 @line_item = @cart.line_items.build
 6 @line_item.product = product
 7 //或是在app/module/line_items.rb中添加
 8 attr_accessible :cart_id, :product_id, :product, :cart
 9  
10 //当然为了以后避免这种情况的发生,最好是把config/application.rb中
11 config.active_record.whitelist_attributes=true
12 //改为
13 config.active_record.whitelist_attributes=false
14 //注意该方法仅限于rails3.2之后的版本
那什么是Mass Assignment:set any model’s attributes by manipulating the hash passed to a model’s new() method。也就是说可以同时对数据库的多个属性通过hash进行赋值操作,比如:
1 def signup
2   params[:user] # => {:name => “ow3ned”, :admin => true}
3   @user = User.new(params[:user])
4 end
然而,考虑到安全因素,rails3.2后又添加了一个特性:attr_protected和attr_accessible
attr_protected:it takes a list of attributes that will not be accessible(黑名单)
attr_accessible:it takes a list of attributes that will be accessible. (白名单)
在黑名单中的属性不能通过mass-assign进行赋值,这确保了数据的安全性。
而关于rails security方面的问题,目测又是很大的一块。

更多内容可参考:http://guides.rubyonrails.org/security.html#mass-assignment
再推荐一篇博文,是关于rails安全问题的一个实例(github被黑了):
http://blog.xdite.net/posts/2012/03/05/github-hacked-rails-security/

  • 关于session和cookies
session和cookies都能requests之间的一些信息进行记录和跟踪,比如用户的登入情况、购物车的内容等等。
而两者的主要区别是:session是将用户的信息放在服务器上,一旦用户离开这个网页,那么这份信息也就会立刻消除,也就说它是临时的;而cookies的内容是保存在浏览器上的,它不会随着用户的离开而消失,举个简单的例子:浏览器中会有个功能叫“记住密码”,当你多次登入一个网页时,不需要多次输入你的用户名和密码,因为cookies已经将该内容保存在浏览器中了——当然,这也会带来安全隐患。
其实这又涉及到了网页安全问题!
更多相关内容可参考:http://php.about.com/od/learnphp/qt/session_cookie.htm

Steven Meng
2013.1.5

 

posted @ 2013-01-05 17:19  StevenMeng  阅读(285)  评论(0编辑  收藏  举报