`
shatler
  • 浏览: 29955 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

rails部分学习笔记

    博客分类:
  • ruby
阅读更多

其实已经在机子上有很久了,今天突然翻到有点有用的东西,笔记很重要呀。很乱,当时是简单地放在txt中的,在网络上放一份,已备不测。

 

作程序的要学会幽默

 

调用下列方法会返回一个列表其中包含当前目录中所有的文件:

@files = Dir.glob('*')

 

在.rb文件类文件中{

validates_presence_of   不为空

validates_uniqueness_of   唯一

validates_numericality_of   价格的合法性

 

图片格式过滤

  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

}

 

{未解决错误:

   运用了Ajax,在add_to_cart.rjs中,

  当购物车中没有所要的产品时,添加时会出现rjs提示错误,亮起效果不能产生。

 

暂时解决方法:

   修改add_to_cart.rjs文件

   其中有

if @current_item!=nil

  page[:current_item].visual_effect :highlight,

                                  :startcolor => "#88ff88",

                                  :endcolor => "#114411"

else

  page.redirect_to :action => "index"

end

   当不存在产品时,执行controller中add_to_cart后,跳转回主页;当存在时,启用ajax并有亮起的

效果。

 

解决方法(网上找的):

page.select("tr#current_item").each { |tr| tr.visual_effect :highlight,

                                  :startcolor => "#88ff88",

                                  :endcolor => "#114411" }

经测试有效。

 

}

 

{

局部模板:

render方法会循环渲染局部模板。

局部模板的名字是“cart_item”,所以在局部模板内部就会有一个名叫cart_item的变量。

 

}

 

{render用法(已知):

render(:partial => "cart", :object => @cart)

render(:partial =>"cart_item",:collection => cart.items )

}

 

h() 方法用于对货品名称和描述中的HTM L 标记进行转义处理, 所以我们会看到锚

述信息中出现HTML标记因为它们被转义然后显示出来,而不是被解释为

HTML.

 

{

在加入每个controller时,检查文件config/routes.rb是否有相应的注册

如:map.resources :store

}

 

{

在html中格式化价格

1,sprintf("$%0.02f",product.price)

2,number_to_currency(product.price)

}

 

{

rake db:sessions:create时

可能会出现错误:

 Mysql::Error: Data too long for column 'session_id'...

}

清空浏览器cookis,解决问题。

 

 

{当有错误“undefined method `product' for #<...>”时,清空浏览器cookis}

 

 

{config/routes.rb

 map.connect 'products/:id', :controller => 'catalog', :action => 'view'

当添加这行语句时,products控制器下的任何action都会自动转到catalog控制器下的:action => 'view',

没有:action参数时,默认转到catalog下的:action=>'index'

 

代码出现过:

"/store"正常,"/store/index" 会有错误,

可能是由于语句:  map.resources :store ,此为REST规则。

map.resources一行代码给我们的应用程序新增了7个路由规则和4个路由辅助方法。

 

通过以下代码可解决页面跳转问题,

map.connect 'store/index',:controller =>'store',:action=>'index',

要在上句之前,在上句之后不能作用。

但是,这会遇到页面中图片引用路径发生改变,图片不能正常显示,待解决。

可能对图片引用路径作些修饰就行了。

}

 

{

调试方法:

如果问题发生在一个Model中,我们可以使用脚本script/console来模拟一个irb对话,在其中进行跟踪,例如下面这样:

Z:\study\ruby\InstantRails\rails_apps\depot>ruby script/console

Loading development environment.

>> pr = Product.find(:first)

=> #<Product:0x4b969ec @attributes={"image_url"=>"http://www.dearbook.com.

>> pr.price

=> #<BigDecimal:4b913d4,'0.12351E3',8(12)>

>> pr.image_url

=> "http://www.dearbook.com.cn/book/BookImage/67/lastTS00168921__.jpg"

>> pr.save

=> true

>> 

我们先在depot项目的命令行中使用ruby script/console来启动irb会话,蓝色的部分是我在irb会话中输入的命令。

 

}

 

{

在做程序时,在model类文件中,添加引用时,服务器可能需要重启才能实现新效果

如“require 'digest/sha1'”,加密方法引用的文件

}

 

{

用户的添加已经实现,用户成功登录未实现,可能存在问题的方法是关于“Digest::SHA1”这种加密密码

方法。

}

 

{

  想要在其它控制器中使用先前的控制器的页面布局,可在要使用先前布局的

控制器中的前面增加语句: layout "引用的布局控制器的名称",

如:layout "admin"

}

 

{

过滤器:

前置过滤器(before_filter)

ApplicationController是所有控制器的父类,可在其中加入过滤方法,如authorize(验证用户),

在子控制器类中的前方,加入 before_filter :authorize.

想要在子控制器类中加入过滤方法,但这子控制器下的某action不想使用过滤,

语句: before_filter :authorize, :except => :action(泛指某action)

 

}

 

 

{

( 为何要检查进入的是否为 HTIP POST 请求呢? 因为这是一个好习惯: 凡是会改

变服务器状态的请求都 应该是 POST .而不应该是 GET 请求。p161

}

 

{

这里的关键概念是用异常来表示删除用户的过程 中出现了错误。这型的异常同时

承担两个任务.首先,在事务内部,异常会导致自动回滚,如果在删除用户之后users

表为空,抛出异常就可以撤销删除操作,恢复最后 一个用户。

其次,异常可以把错误信息带回给控制器。p163

}

 

{

rake aborted!

Don't know how to build task 'clone_structure_to_test';

 

If you are running Rails 2.x then the correct command is:

rake db:test:clone_structure

 

}

 

{

测试中用到。

require File.dirname(__FILE__)+'/../test_helper'

其中的__为两个下横线。

}

 

 

{

测试模块:

关于购物车Cart(p187)未能通过,出现错误:

ActiveRecord::StatementInvalid: Mysql::Error: Table 'depot_test.cart' doesn't ex

ist: DELETE FROM `cart`

 

已经解决:

不能觉得加入cart_test.rb文件之后,就自以为是在/test/fixtures内添加cart.yml文件,

删除cart.yml即可。

}

 

{

assert_not_nil assigns(:@cart)

@cart为一变量,但上语句是不能通过的,修改为

assert_not_nil assigns(:cart),可通过

}

 

 

{

#添加商品进购物车 in the user_stories_test.rb

#    xml_http_request :get,"/store/add_to_cart",:id => ruby_book.id

#    xhr(:get,{:controller=>'store',:action=>'add_to_cart'},:id=>ruby_book.id )

#    assert_response :success

未能将商品添加到购物车中,等待解决。。。

可能是版本原因,以下可行。

xml_http_request :put, "/store/add_to_cart/#{ruby_book.id}"

}

 

{

新建integration测试命令,如:

ruby script/generate integration_test dsl_user_stories

输出:

   exists  test/integration/

   create  test/integration/dsl_user_stories_test.rb

 

}

 

{

depot > rake rails:freeze:gems

这个命令会在幕后将簸新版本的 Rails库拷贝到 vendor/rails目录下,当应用程

序启动时,Rails会首先到这里来寻找自己需要的库,然后再寻找全系统共享的版本。

 

如果在困化之后希望取消绑定、继续使系统共享的Rails版本.可以直接把

vendor/rails 目录删掉, 也可以执行下列命令:

depot > rake rails:unfreeze

}

 

{

运行服务器:

ruby script/server -e development  ,默认

ruby script/server -e test

ruby script/server -e production

}

 

{

.find(..)可用参数有:

:all,:first,:conditions,:order,:limit,:offset,:joins,:readonly,:from,:group,:lock

}

 

{

delete()方法绕过了ActiveRecord的回调和验证,而destroy()方法则可以确保调用这些功能。

一般而言,最好是使用destroy()方法,因为这样可以确保进行模型类中定义的业务规则检查,

以保证数据库的完整性。

}

 

{

含有外键字段的表,与其对应的模型类始终应该使用belongs_to声明。

}

 

{

ORM有一个基本原则:数据库调用越少越好

}

 

 

{

ActiveRecord校验辅助方法,它们名字都以validates_开头。

validates_acceptance_of :accept,:allow_nil,:if,:message,:on

validates_associated :allow_nil,:if,:message,:on

validates_confirmation_of :allow_nil,:if,:message,:on

validates_each :allow_nil,:if,:on

validates_exclusion_of :allow_nil,:if,:in,:message,:on

validates_format_of :allow_nil,:if,:message,:on,:with

validates_inclusion_of :allow_nil,:if,:in,:message,:on

validates_length_of :allow_nil,:if,:in,:is,:minimum,:maximum,:message,

:on,:too_long,:too_short,:wrong_length

validates_numbericality_of ::allow_nil,:if,:message,:on,:only_integer

validates_presence_of :allow_nil,:if,:message,:on

validates_size_of :allow_nil,:case_sensitive,:if,:message,:on,:scope

}

 

{

ruby script/console

>> rs=ActionController::Routing::Routes

>> puts rs.routes

 

>> rs.recognize_path "/store"

=> {...}

 

>> rs.generate :controller =>:store

=> {...}

 

}

 

{

路由测试:routing_test.rb

}

 

{

session :off,:only,:except,:if

 

要在整个应用程序范围内禁用session,只要在app/controllers/application.rb加上

代码:

session :off

如果放在某一个控制器内,那么它就只对这个控制器有效。

}

 

{

rails支持有三种不同过滤器:

before,after,around.

   后置过滤器可以用于修改输出的应答信息,根据需要改变应答的信息乃至正文。有些

应用程序用这种技术来对控制器模板生成的内容进行全局替换。另一种觉用途是对应答

信息进行压缩。

    环绕过滤器会把action的执行过程包裹在其中。有两种方式可以编写环绕过滤器,

其一,可以把过滤器写成单独的 一段代码,它会在 action执行之前被调用。如果过滤器

代码调用了yield. 那么action 就会被执行。action 执行完毕之后, 过滤器代码会继续执

行。因此,yield 之前的代码就好像是一个前置过滤器,yield 之后的代码则像是后置

过滤器。如果过滤器代码中没有调用yield。action 就不会被执行一一其效果就跟前置

过滤器返回false一样。

}

 

 

{

过滤器中,:only,:except对应多个action时,可用数列表示,如:

before_filter :store, :except => [:delete,:edit_comment]

}

 

{

@files=Dir.glob("/*")

会得到执行根目录的所有文件。

@files=Dir.glob("*")

会得到执行目录下的所有文件,注意是“执行目录”,而不是文件目录。如,

.rb文件在d盘,dos的c:\下执行此文件,将会得到的是c盘下的文件 。

}

 

{

 如果你所编写的表单对应于数据库资源,通常应该用form_for辅助方法来生成表单;

如果表单并不与数据库表直接对应,就可能需要用到比较低级的form_tag辅助方法。

}

 

 

{文本字段:

form.text_field()

form.hidden_field

form.password_field

}

 

{

form.text_area

}

 

{单选按钮:

form.radio_button

}

 

{复选按钮:

form.check_box

}

 

{选择列表:

form.select

}

 

{截取文件路径中文件名:

C:/NetBeansProjects/test/public/uploads/Image/35/image02.jpg 

我有一个字符串如上,我想通过一个正则表达式把截取最后一个’/‘后的所有字符 

也就是image02.jpg  这个正则表达式怎么写。谢谢。

 

> File.basename("C:/NetBeansProjects/test/public/uploads/Image/35/image02.jpg") 

另一方法:

> "C:/NetBeansProjects/test/public/uploads/Image/35/image02.jpg".split("/")[-1] 

 

}

 

 

 

 

分享到:
评论

相关推荐

    rails查询学习笔记

    以上内容只是Rails查询学习笔记中可能涵盖的部分主题,具体笔记内容还需要参考博文链接或实际文件内容来获取详细信息。学习和理解这些知识点,对于任何Rails开发者来说,都能极大地提升他们在数据库操作上的效率和...

    ruby on rails 笔记(陈刚)

    从给定的文件信息来看,这份文档是陈刚关于Ruby on Rails的学习笔记,旨在帮助初学者更好地理解并掌握Ruby on Rails这一流行的Web开发框架。以下是对文档中提及的关键知识点的详细解析: ### 安装与配置 #### Ruby...

    Ruby_On_Rails笔记

    综上所述,Ruby on Rails的笔记内容涵盖了从安装Rails环境到创建和运行一个简单的Rails项目的基础知识,这些内容对于初学者来说是学习Rails框架的极好入门材料。通过对这些知识点的学习,初学者可以快速了解Rails的...

    Ruby_on_Rails笔记

    在《Ruby on Rails笔记》中,作者陈刚分享了他在学习Ruby on Rails过程中的经验与心得。这份笔记不仅包含了作者的学习历程和个人体会,还汇集了他在学习过程中遇到的问题及其解决方案。作者提到,“读不如做,做不如...

    ruby on rails 实践

    作者鼓励读者在学习过程中注册GitHub账号,建立学习笔记仓库,以便与他人分享学习成果。书中的代码示例遵循特定的命名规则,比如命令使用小写,而作为名词时首字母大写。 《Ruby on Rails 实践》一书的著作权归作者...

    Ruby on Rails心得

    陈刚撰写的《Ruby on Rails心得_V0.1》是一份非常宝贵的资料,旨在记录作者在学习Ruby on Rails过程中的所见所得,包括读书笔记、心得体会、自创教程及一些常见问题的解决方案。作者通过写作这种方式不仅加深了对...

    后端语言的学习笔记.zip

    "后端语言的学习笔记.zip"这个压缩包很可能包含了关于各种后端编程语言的学习资源,特别是那些用于构建动态网站和Web服务的语言。尽管没有具体的标签提供额外信息,我们可以推测这可能涵盖了诸如Java、Python、Node....

    rubyinstaller-devkit-3.0.2-1-x64 and Ruby 学习笔记.7z

    总的来说,`rubyinstaller-devkit-3.0.2-1-x64 and Ruby 学习笔记.7z`文件包含了一个在Windows上开始Ruby编程所需的基本组件和学习资源。通过安装Ruby和DevKit,你可以轻松地编写、编译和运行Ruby代码,同时结合学习...

    Agile Web Development with Rails 3nd 下载

    在描述中提到的“NULL”可能意味着该资源没有提供详细的介绍,但通过博文链接(https://hlee.iteye.com/blog/351357),我们可以推测这是一个关于学习和实践Rails 3的博客文章,可能包含了作者的学习笔记、示例代码...

    Rail笔记

    笔记中提到了几本关键书籍,这些资源对于深入学习Rails具有重要作用。例如,《Ruby on Rails快速Web应用开发实战》提供了实践指导;《RUBY语言入门教程》帮助读者掌握基础语法;《应用Rails进行敏捷Web开发》则从...

    notes_about_rails:我关于Rails源代码的注释-ab source code

    以上只是Rails源代码学习的一部分要点,实际的“notes_about_rails”可能会涵盖更多细节,如特定组件的实现、性能优化技巧或错误处理策略。通过这些笔记,开发者可以逐步加深对Rails框架的理解,提升自己的开发能力...

    Notebook:使用Ruby on Rails,HAML和CSS的笔记本应用

    JavaScript是Web开发中不可或缺的一部分,负责处理用户交互、动态更新内容、验证表单输入等功能。在这个Notebook应用中,JavaScript可能会用于实现诸如添加、编辑、删除笔记,或者提供实时预览等动态效果。 在...

    Ruby:Ruby on Rails 书

    Rails的MVC架构将应用程序分为三个主要部分:模型(Model)负责数据处理和业务逻辑,视图(View)用于显示用户界面,而控制器(Controller)协调模型和视图之间的交互。Rails还提供了许多内置功能,如ActiveRecord...

    ruby-on-the-way:学习 ruby 和 rails 相关资料

    在“ruby-on-the-way”资料包中,可能包含了各种教程、代码示例、练习项目和笔记,这些都是学习过程中不可或缺的部分。Git的提及意味着这份资料可能还包括了如何使用版本控制系统来管理代码的知识,这对于团队协作和...

    ruby_on_rails_learning:我的RoR笔记本

    这个"ruby_on_rails_learning:我的RoR笔记本"是某位开发者的学习记录,反映了他从初级到进阶的过程中对RoR的理解和实践经验。 在RoR中,"模型"负责处理数据和业务逻辑,通常与数据库交互;"视图"则负责展示用户界面...

    React-Rails-Notes-app:具有Rails,PostgreSQL,React和Bootstrap的Notes应用

    通过这个项目,你可以学习到如何将React与Rails集成,理解RESTful API的工作原理,以及如何使用PostgreSQL存储数据。此外,你还可以深入了解前端开发中的状态管理、组件通信,以及如何利用Bootstrap提高开发效率。...

    rails_memo

    总的来说,Rails Memo 示例应用展示了 Rails 框架的基本工作原理和组件,为初学者提供了一个很好的起点,以便理解和学习如何使用 Rails 开发 web 应用。通过探索这个项目的源代码,可以更深入地理解 MVC 设计模式...

    mytestrails

    这本书是学习 Rails 的经典参考资料,涵盖了从基础到高级的许多主题。 标签 "ruby" 明确了这个话题与 Ruby 语言紧密相关,而 Ruby 语言是 Rails 框架的基础。Ruby 以其简洁、易读的语法和对开发者友好的特性闻名,...

    超详细的Spring Boot入门笔记(总结)

    超详细的Spring Boot入门笔记(总结) Spring Boot是Spring社区较新的一个项目,旨在帮助开发者更容易地创建基于Spring的应用程序和服务,让更多人的人更快地对Spring进行入门体验,让Java开发也能够实现Ruby on ...

Global site tag (gtag.js) - Google Analytics