Kev*_*ang 14 activerecord ruby-on-rails
大多数Rails教程展示如何通过params哈希填充模型类,如下所示:
class UsersController < ApplicationController
def create
@user = User.create(params[:user])
# more logic for saving user / redirecting / etc.
end
end
Run Code Online (Sandbox Code Playgroud)
如果模型中的所有属性都应该是字符串,那么这很有用.但是,如果某些属性应该是整数或日期或其他类型,会发生什么?
例如,假设User类看起来像这样
class User < ActiveRecord::Base
attr_accessible :email, :employment_start_date, :gross_monthly_income
end
Run Code Online (Sandbox Code Playgroud)
:email属性应该是一个字符串,:employment_start_date属性应该是一个日期,而:gross_monthly_income应该是一个小数.为了使这些属性具有正确的类型,我是否需要更改控制器操作以使其看起来像这样?
class UsersController < ApplicationController
def create
@user = User.new
@user.email = params[:user][:email]
@user.employment_start_date = params[:user][:employment_start_date].convert_to_date
@user.gross_monthly_income = params[:user][:gross_monthly_income].convert_to_decimal
# more logic for saving user / redirecting / etc.
end
end
Run Code Online (Sandbox Code Playgroud)
我实际上会before_save在你的用户模型中添加一个回调,以确保你想要的值是正确的格式,即:
class User < ActiveRecord::Base
before_save :convert_values
#...
def convert_values
gross_monthly_income = convert_to_decimal(gross_monthly_income)
#and more conversions
end
end
Run Code Online (Sandbox Code Playgroud)
所以你可以打电话给User.new(params[:user])你的控制器,它遵循"保持你的控制器瘦"的座右铭
| 归档时间: |
|
| 查看次数: |
28989 次 |
| 最近记录: |