天津福康纳米科技有限公司,电子烟,磁疗,远红外线产品。
‘tech’ 分类下的文章
十二 18

开发笔记:rails分页和acts_as_taggable插件的应用[重发]

2008年十二月18日,星期四,下午 4:04 | 分类:tech | 给我留言 |

最近一个月在忙于开发项目,所以没有更新博客。不过开发中还是学到不少东西。 对于一个程序员,阅读是相当有帮助的,读别人的博客,读源码,读经验文章 ,即便读别人的开发代码,都是有帮助的。 本次开发的初始,就是在读别人的开发代码,然后一点点找到思路,继续在原有基础上加强功能。由于上一个版本的代码写的相当有水准,所以对自己的开发也提高不少。 本次开发的项目是一个在线视频教学系统。开发中用到了曾经写过的分页代码和一个rails插件:acts_as_taggable。 下面对这两个部分进行总结。 一、分页 下面的程序在3个项目上使用过。 models/page.rb class Page attr_accessor :pages #分页连接列表,[]类型 attr_accessor :cur #当前页 end helpers/application_helper.rb def howtopage_links(pagecls=nil) #在页面输出分页连接,pagecls:分页实例 if pagecls return pagecls.pages.collect {|t| [if t.to_s == pagecls.cur ""+(t.to_s)+"" else ""+(t.to_s)+"" end] } end end controllers/application.rb def howtopage(totalcount=0, per_page=6) cur_page = params[:page] || 1 #直接从页面取得page变量 x = (cur_page.to_i – 1) * per_page [...]

(阅读更多精彩内容...)
十二 07

Rails中基于属性的动态查询

2008年十二月7日,星期天,上午 2:02 | 分类:tech | 给我留言 |

这是个很简单的Rails2.1.2的 find 的应用,来自Rdoc ActiveRecord::Base 一、find :first 和find :all 使用 Model.find_by_user_name ,来简写 Model.find(:first, :conditions=>["user_name=?",user_name]) 使用 Model.find_all_by_user_name ,来简写 Model.find(:all, :conditions=>["user_name=?",user_name]) 这里也可以使用and,比如典型的用户名和密码查询:Person.find_by_user_name_and_password(user_name, password) find也支持带参数的查询,比如Payment.find_all_by_amount(50, rder => “created_on”) 二、find_or_create_by_和find_or_initialize_ find_or_create_by_:当查询的内容不存在时,创建并保存该记录 find_or_initialize_:更上面的相似,只是创建不保存该记录,需要自己再次save 这里也支持参数和代码块,如 User.find_or_create_by_name(‘Bob’, :age => 40) { |u| u.admin = true } 三、find_by_的时候,支持多属性,如 Tag.find_or_create_by_name(:name => “rails”, :creator => current_user) 以上文字来自Rails2.1.2的Rdoc文档ActiveRecord::Base

(阅读更多精彩内容...)
十一 29

重读AWDWR笔记

2008年十一月29日,星期六,下午 5:05 | 分类:tech | 给我留言 |

加载路径 标准的环境配置回自动将下列目录纳入应用程序的加载路径。 test/mocks/environment 由于该目录位于加载路径的第一位,在这里定义的类回自动覆盖真正的实现类,这样你就可以在测试阶段使用这些替代品。 app/controllers 目录及其子目录。 app/models 和 components 目录下所有以下划线或者小写字母开头的目录。 app, app/models, app/controllers, app/helps, app/services, app/apis, components, config, lib 以及 vendor 目录 检查 vendor/rails 目录,如果存在就从这里加载 Rails 库。 命名约定 变量名全部小写,单词之间以下划线分割。 类和模块的名称没有下划线,短语中每个单词的首字母大写。 表应该像变量一样,采用小写字母,并且是复数形式。 文件名全部小写,以下划线分割。 controller 用名词,action 用动词。当你创建了一个 action 的名字是 动词_名词 这样的格式,那么有必要再创建一个新的controller了 。

(阅读更多精彩内容...)
十一 29

重读AWDWR笔记

2008年十一月29日,星期六,上午 6:06 | 分类:tech | 给我留言 |

第9章 使用局部模板。 render :partial => “cart”, bject => @cart render :partial => “cart_item”, :collection => @cart.items 辅助方法的一个示例。 # app/views/layout/stroe.rhtml “cart”) %> “cart”, bject => @cart %> <div> # app/controllers/store_controller.rb def hidden_div_if(condition, attributes = {}) if condition attributes["style"] = “display: none;” end attrs = tag_options(attributes.stringify_keys) ” ” end 第10章 validates_inclusion_of 方法验证某属性,在指定的列表中存在。防止别人构造不存在的支付方法逃避支付。 PAYMENT_TYPES = [ ["Check", "check"], [...]

(阅读更多精彩内容...)
十一 29

重读AWDWR笔记

2008年十一月29日,星期六,上午 2:02 | 分类:tech | 给我留言 |

第12章 使用 :through 声明,可以通过间接关联来联系两张表。 可以使用 curl 或者 wget 工具来模拟请求xml。 class Product < ActiveRecord::Base has_many rders, :through => :line_items end class Order < ActiveRecord::Base has_many :line_itemss end class LineItem < ActiveRecord::Base belongs_to rders belongs_to :product end curl http://localhost:3000/info/who_bought/1 第11章 after_destroy 钩子方法于 delete 同在一个事务中,因此只要该方法里抛出异常,整个事务会回滚。after_destroy 会在 delete 语句执行之后被调用。 这里关键概念是,用异常来表示删除用户的过程中出现了错误。这里的异常同时承担两个任务。首先,在事务内部,异常会导致自动回滚;如果在删除用户之后 user 表为空,抛出异常可以撤销删除操作,恢复最后一个用户。 其次,异常可以把错误信息带回给控制器。 # app/model/user.rb def after_destroy if User.count.zero? [...]

(阅读更多精彩内容...)
十一 28

带着restful_authentication运行rspec时,貌似cookies无效的问题

2008年十一月28日,星期五,下午 2:02 | 分类:tech | 给我留言(1 条留言) |

起因:在未做自己开发rspec的时候,只是调试下安装完 restful_authentication 的rspec和部分test时候,出现了几个错误: 1、 Spec::Mocks::MockExpectationError in ‘SessionsController Logging in by cookie fails cookie login with bad cookie’ fails cookie login with bad cookie(Spec::Rails::Example::ControllerExampleGroup::Subclass_1::Subclass_4) expected :cookies with (any args) once, but received it 0 times ./spec/controllers/authenticated_system_spec.rb:85: 2、 ‘SessionsController Logging in by cookie logs in with cookie’ FAILED expected true, got false ./spec/controllers/authenticated_system_spec.rb:81: 3、 ‘AccessControlTestController requesting xml; [...]

(阅读更多精彩内容...)
十一 28

在windows和netbeans6.5上,准备Rspce开发

2008年十一月28日,星期五,上午 8:08 | 分类:tech | 给我留言 |

一、环境 ruby -v >> ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32] rails -v >> Rails 2.1.2 二、需要安装的gem和plugin gem install ZenTest 因为我的Rails是2.1.2,所以在安装plugin时,用了下面的方法: ruby script/plugin install git://github.com/dchelimsky/rspec.git ruby script/plugin install git://github.com/dchelimsky/rspec-rails.git ruby script/generate rspec 另外还有一些辅助的工具,不在此详述 三、出现的问题 1、netbeans加载autotest时候的环境变量 解决:在系统环境中,需要加入home=当前项目的根文件夹,这样nb就能正常启用autotest了 2、restful_authentication的rspec时,出现mysql的Mysql::Error: Incorrect datetime value错误 mysql配置文件my.ini中,注释掉 sql-mode=”STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION” 一行(我的在87行) 下面添加一行:sql-mode=”” 重启mysql 四:参考文章 RubyTesting The Basics of Creating Rails Plugins,创建Rails插件的基础教程 RSpec的很重要的中文文档: http://www.letrails.cn/archives/20 http://www.letrails.cn/archives/advanced-rspec-tutorials-rspec-scaffold [...]

(阅读更多精彩内容...)
十一 28

重读AWDWR笔记

2008年十一月28日,星期五,上午 6:06 | 分类:tech | 给我留言 |

感恩节放假,抓紧时间重读一下AWDWR把一些知识点记录如下。 第6章 迁移习惯 create 来创建表,add 给现有表增加字段。你可以会看到 002_add_price.rb 的迁移。 model 中验证方法设置为 protected 是因为该方法必须在特定的模型上下文中调用,不能在外部调用。 protected def validate errors.add(:price, “should be at least 0.01″) if price.nil? || price < 0.01 end errors.add() 方法第一个参数是字段名称,第二个参数是出错信息的正文。 在将价格和 0.01 比较之前,先检查它是不是 nil。试图将 nil 和数字比较会引发异常。 下面代码演示了如何用正则表达式验证模型属性。 validates_format_of :image_url, :with => %r{\.(gif|jpg|png)$}i, :message => “must be a URL for a GIF, JPG, or PNG image” [...]

(阅读更多精彩内容...)
十一 27

ruby for rails 摘录

2008年十一月27日,星期四,上午 8:08 | 分类:tech | 给我留言 |

if 关键字 if condition # code here, executed if condition evaluates to true. end if x > 100 then puts x end if x > 100; puts x end if condition # code executed if condition is true. else # code executed if conditions is false. end if condition1 # code executed if condition1 is [...]

(阅读更多精彩内容...)
十一 17

ruby for rails 摘录

2008年十一月17日,星期一,上午 7:07 | 分类:tech | 给我留言 |

class, module, def 标志着切换到新的 self, main 是默认的 self 对象用来引用自己的专门术语。self 作为消息默认的接受者,如果消息接受者是 self ,可以省略接受者和圆点。 如果存在同名的方法名和变量,而且你使用裸词标识符,那么变量具有优先权。要强制 Ruby 将标识符当作方法名,你必须使用 self.talk 或者用参数列表为空的 talk() 来调用方法。 有一个场合,即使是发送消息给当前的 self,也必须使用完整的“对象 圆点 消息”记法,那就是在调用写方法的时候。因为 Ruby 总之将序列“裸词=值”解释为对局部变量的赋值。为了调用当前对象的 venue= 方法,必须显示的给出 self。 private 和 protected 的区别 私有方法意味着该方法不能使用显式的接收者来调用。Ruby 认为你想要发送消息给当前对象 self。所以仅当 self 是一个可以响应消息的对象时,该消息才有对象接收。那啥时候 self 才会是类的实例呢?当执行类的任何一个实例方法时。所以看如下代码 class Baker def bake_cake @batter = [] pour_flour add_egg return Cake.new end def pour_flour @batter.push(Flour.new) end [...]

(阅读更多精彩内容...)
  • 信息发布
  • 最新留言
  • 热评日志
我的2010,新的开始啦

稍后把团队的介绍放上,呵呵。
关于 里克
里克:本名李伟,全职SOHO开发,技术顾问
长春互联 技术总监
邮件:liwei@echangchun.net
QQ:5175486
MSN:liwei78@live.com
某高潜力SNS网站团队成员
对iphone和android的开发很感兴趣