锁定老帖子 主题:关于rails的几个问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2006-06-02
有的时候我可能每次只需要update一个model某几个属性,比如对于User,我可能有几个方法,一个update name,email等属性,一个用来修改密码,这时候validates似乎很难写啊, validates_presence_of :name, :email, :on=>:update validates_presence_of :password, :on=>:update validates_confirmation_of :password, :on=>:update 因为我一个update name,email的时候并没有password这个attr(password并不是persistent的,数据里保存的市password_hash),所以validate通不过 2 cookies的问题 用cookies[:key]只能读到cookie的值,但我有时候需要知道cookie的expires等其他属性,怎么办啊? 3 我在log文件里看到这样的sql SELECT * FROM users WHERE (users.`name` = 'myname' ) UPDATE users SET `created_at` = '2006-06-02 17:21:44', `name` = 'myname'... 难道rails并没有使用占位符和参数? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2006-06-03
1: 这个可以这么解决:
validates_length_of :pass, :within => 5..40,n => :create validates_confirmation_of :pass, :if=> Proc.new { |u| u.pass.size > 0} 2: API 中写了,.“ Cookies are read by value (so you won’t get the cookie object itself back — just the value it holds). ” 但是设置的时候可以 Hash 方式Set,为什么这么设计,不明白? 3:Log 输出的是已经完成替换的的 SQL 语句了,在 Controller 中写的时候,我尽量是使用 update_attributes(params[:user]) 的方式来更新,这些函数其实就是使用占位符的。 |
|
返回顶楼 | |
发表时间:2006-06-03
1 但是我改密码的时候也需要validate password呀
2 我也看到了 3 哦,这样啊。但是update_all好像不能用占位符的形式,下面这样不行 User.update_all "name='a'", :conditions => ['name = ?', 'b'] update_attributes(params[:user])这样似乎不是很安全,也许有些属性我并不想update,比如email,也许注册以后就不能改了,所以你必须要保证params[:user]里面没有:email的项,恶意的用户可能会直接给你传一个user[email]的参数 |
|
返回顶楼 | |
发表时间:2006-06-03
用 before_create , before_update
before_save:crypt_password def crypt_password if pass.empty? xxxxxxxxxxxxx else xxxxxxxxxxxxx end end |
|
返回顶楼 | |
发表时间:2006-06-03
stillanother 写道 3 哦,这样啊。但是update_all好像不能用占位符的形式,下面这样不行 User.update_all "name='a'", :conditions => ['name = ?', 'b'] update_attributes(params[:user])这样似乎不是很安全,也许有些属性我并不想update,比如email,也许注册以后就不能改了,所以你必须要保证params[:user]里面没有:email的项,恶意的用户可能会直接给你传一个user[email]的参数 1:你可以将那些需要同时更新的字段和单独更新的字段分开,用 attr_accessible 来定义那些 同时更新的字段 。 2:或者用 order = Order.find_by_sql ("select id,name,email from xxxx") 搜索要更新的记录,在Sql 中列出要更新的字段,然后 order.email = "eiffelqiu@hotmail.com" order.save 这样就可以只保存更新你列出的字段了,这是 Rails Book 上说的。 3:也可以用 update(12,:name=>"test",:email=>"eiffelqiu@gmail.com" ) 的方式来更新 |
|
返回顶楼 | |
发表时间:2006-06-03
stillanother 写道 3 哦,这样啊。但是update_all好像不能用占位符的形式,下面这样不行 User.update_all "name='a'", :conditions => ['name = ?', 'b'] 好像是不能用占位符,我没具体用过, 不过你可以用 User.update_all "name='a'", "name = #{@name}" 这种形式,不过这种方法似乎不安全。 我上网查了查,最近由于GFW , 上不了 Google, 所以。。。。。 麻烦。 http://dev.rubyonrails.org/ticket/519 你说的这个问题好像已经解决了。 |
|
返回顶楼 | |
发表时间:2006-06-03
......
再查下,呵呵~ |
|
返回顶楼 | |
发表时间:2006-06-03
谢谢,受教了:arrow:
Rails Book是哪本书? 我有Agile Web Development with Rails,Ruby for Rails,Rails Recipes,不过没全部仔细看,那个浮躁呀:oops: |
|
返回顶楼 | |
发表时间:2006-06-03
stillanother 写道 谢谢,受教了:arrow:
Rails Book是哪本书? 我有Agile Web Development with Rails,Ruby for Rails,Rails Recipes,不过没全部仔细看,那个浮躁呀:oops: Agile Web Development with Rails 一般被称为 Rails Book Programming Ruby 一般被称为 Axe Book。 |
|
返回顶楼 | |
发表时间:2006-06-03
可以了,这样
User.update_all ['name=?','a'], ['name=?','b'] 寒啊,文档不够好 |
|
返回顶楼 | |