Rails宝典之第十七式: 多对多Checkbox编辑
这次是讲多对多情况下的编辑,我们使用Checkbox来完成该工作: class Category < ActiveRecord::Base has_and_belongs_to_many :products end class Product < ActiveRecord::Base has_and_belongs_to_many :categories end 上面Category ...
Rails宝典之第十六式: 虚拟属性
看一个场景,用户注册时需要填写First Name,Last Name,Password: <h1>Register</h1> <% form_for :user, :url => users_path do |f| %> <p> First Name<br/> <%= f.text_field :first_name %&g ...
Rails宝典之第十五式: find条件
数据库查询的conditions除了简单的字符串,还可以用数组,range,nil等等,看看代码: Task.find(:all, :conditions => ["complete=? and priority=?", false, 3]) Task.find(:all, :conditions => ["complete=? and priority ...
Rails宝典之第十四式: Model上的calculations
没什么新意: >> Task.sum(:priority) => 15 >> Task.sum(:priority, :conditions => 'complete=0') => 13 >> Task.maximum(:priority) => 4 >> Task.minimum(:priority) => 1 > ...
Rails宝典之第十三式: Model放在Session里的危险
上次我们说到@current_user时不要将user对象放在session里,而只放user_id,然后每次去数据库取user对象。 有人不理解,这次的视频给出了答案: class UsersController < ApplicationController def prepare session[:user] = User.find(:first) redirect_to action ...
Rails宝典之第十二式: 重构用户名-p3
这次我们来重构我们的测试用例。 require File.dirname(__FILE__) + '/../test_helper' class UserTest < Test::Unit::TestCase fixtures :users def test_full_name_without_middle_initial user = User.new(:first_name => ...
Rails宝典之第十一式: 重构用户名-p2
继续重构。 我们先来写User类的单元测试,定义3个测试方法: require File.dirname(__FILE__) + '/../test_helper' class UserTest < Test::Unit::TestCase fixtures :users def test_full_name_without_middle_initial user = User.new(: ...
Rails宝典之第十式: 重构用户名-p1
看这个显示用户Profile的页面: <h1>Profile</h1> <p> Name: <%= @user.first_name %> <%= "#{@user.middle_initial}." unless @user.middle_initial.nil? %> <%= @user.last_name ...
Rails宝典之第九式: 在日志里过滤敏感数据
这是个安全问题,当我们在系统注册页面输入密码等敏感数据时,我们可以看到,密码以明文的形式显示在日志文件里: Processing UsersController#create (for 127.0.0.1 at 2007-02-23 19:11:20) [POST] Session ID: 4047778b64af62d387f7e860e51cce20 [color=red]Parameters ...
Rails宝典之第八式: layout与content_for
如果我们想根据模板页面更改局部layout,使用content_for即可。 content_for允许模板页面代码放到layout中的任何位置。 比如我们的Rails程序不同的页面有不同的css样式,我们可以在layout里留出位置: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http ...
Rails宝典之第七式: layout详解
这次的视频很有用,详细解释了layout的用法 一般来说layout有如下五种: gobal layout,controller layout,shared layout,dynamic layout,action layout 假设我们有一个views/projects/index.rhtml页面: <h2>Projects</h2> <ul> <% ...
Rails宝典之第六式: Symbol to Proc
这次来介绍ActiveSupport里对Symbol的扩展,我们先来看active_support/core_ext/symbol.rb文件: class Symbol # Turns the symbol into a simple proc, which is especially useful for enumerations. Examples: # # # The same as peo ...
Rails宝典之第五式: 使用with_scope
这次来介绍with_scope方法的使用。 继续前面的例子,我们希望只取得complete为false的前20条数据,我们可以给find_incomplete方法添加一个Hash参数,然后使用with_scope将 额外的参数附加到我们的查询方法里: class Task < ActiveRecord::Base belongs_to :project def self.find_inco ...
Rails宝典之第四式: 将查询移位Model
沿着Rails宝典之第三式: 通过关联做查询的脚步,我们可以进一步简化代码: class Task < ActiveRecord::Base belongs_to :project def self.find_incomplete find_all_by_complete(false, : order => 'created_at DESC') end end class Proje ...
Rails宝典之第三式: 通过关联做查询
Rails宝典之第三式: 通过关联做查询 我们来看一个has_many关联的例子: class Project < ActiveRecord::Base has_many :tasks end class Task < ActiveRecord::Base belongs_to :project end class ProjectsController < Applicatio ...
Rails宝典之第二式: 动态find_by方法
Rails宝典之第二式: 动态find_by方法 忘了声明了,这个系列主要是Rails入门教学。 今天Rails宝典教大家的是动态find_by方法,我们先看一段代码: class TasksController < ApplicationController def incomplete @tasks = Task.find(:all, :conditions => ['comp ...
Rails宝典之第一式: 实例变量做查询缓存?
前段时间对Rails的跟进有点懈怠,因为公司让我做Spring的内部培训,便抽空回归Java,看了下字符集,字节码,Annotation, JavaConfig,JavaScript,Perl,花生壳等等乱七八糟的东西,差点把心收不回来准备去搞C#.net了。 每天一剂Rails良药要开工了,顺便把《The Ruby Way》eMule下来了,再写个“每天一条Ruby小道”怎么样? 前段时间订阅 ...
ActionController::Resources + ActiveResource = REST
从Rails的svn资源库下载最新的Rails,我们会发现多了个activeresource包 从此Rails核心模块变为: ActiveRecord、ActionPack、ActionWebService、AcionMailer、ActiveResource、ActiveSupport和Railties 这里有几个问题: 一,ActionController里的resources.rb文件与A ...
Rails源码研究之ActionView:七,capture_helper
Struts有Tiles,WebWork可以用sitemesh,而Rails呢?有Capture! 请看活生生的例子先: 例子1: # layout.rhtml: <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> & ...
Rails源码研究之ActionView:六,scriptaculous_helper
scriptaculous_helper主要是对scriptaculous的controls和effects相关方法调用的封装 require File.dirname(__FILE__) + '/javascript_helper' module ActionView module Helpers module ScriptaculousHelper unless const_defined? ...
Rails源码研究之ActionView:五,prototype_helper
Rails的Ajax是依赖于prototype库的,我们来看看ActionView对prototype的一些方法调用的封装 源文件为prototype_helper.rb,其中包括RJS的update_page调用的JavaScriptGenerator类的定义: 1,link_to_remote是简单的异步url请求 def link_to_remote(name, options = {}, ...
Rails源码研究之ActionView:四,javascript_helper
跟模板中JavaScript相关的helper方法定义文件有javascript_helper.rb/prototype_helper.rb/scriptaculous_helper.rb 其中javascript_helper与基本的JavaScript功能有关,prototype_helper与Ajax有关,而scriptaculous_helper与controls和visual effect ...
Rails源码研究之ActionView:三,form_helper
ActionView还带有许多helpers,让我们开发起来更快速更顺手,让我们来看看form中常用的一些helper方法 form_helper.rb: module ActionView module Helpers module FormHelper def form_for(object_name, *args, &proc) raise ArgumentError, " ...
Rails源码研究之ActionView:二,partials
partials是Rails模板重用的一项重要技术,让我们来读读partials.rb源码文件: module ActionView module Partials def render_partial(partial_path, local_assigns = nil, deprecated_local_assigns = nil) path, partial_name = partial_pi ...
Rails源码研究之ActionView:一,基本架构和ERB
先看源码再分析 1,action_view.rb $:.unshift(File.dirname(__FILE__) + "/action_view/vendor") require 'action_view/base' require 'action_view/partials' ActionView::Base.class_eval do include ActionVie ...
Rails源码研究之ActionController:十,pagination
1,action_controller\pagination.rb: module ActionController module Pagination def paginate(collection_id, options={}) Pagination.validate_options!(collection_id, options, true) paginator_and_collection ...
Rails源码研究之ActionController:九,mime_responds
Rails从HTTP Accept header得到客户端需要的response format信息 默认的MIME types见mime_type.rb: ALL = Type.new "*/*", :all TEXT = Type.new "text/plain", :text HTML = Type.new "text/html", ...
Rails源码研究之ActionController:八,resources
深入了解一下ActionController的Resources--RESTful Rails 1,ActionController的resources用来实现REST api,一个单独的resource基于HTTP verb(method)有不同的行为(action),如: map.resources :messages class MessagesController < Action ...
Rails源码研究之ActionController:七,filters
我们上次看过了ActiveRecord的callbacks,这次看看ActionController的filters 1,filter继承 先执行父类中的filter,再执行子类中的filter,如果父类中的filter返回false,则不执行子类中后续的filter 2,filter类型 1)method reference(symbol) class BankController < ...
Rails源码研究之ActionController:六,request
看看Rails的request/response源码吧,非常有趣,有些方法非常实用 1,request.rb: module ActionController class AbstractRequest def method @request_method ||= (!parameters[:_method].blank? && @env['REQUEST_METHOD'] == ...