Spl*_*Tea 44 ruby ruby-on-rails
快速示例:用户在表单中输入用户名,在将其存储在应用程序的数据库中之前,我需要创建该文本用户名,从而使其永久小写.
我将把这段代码放在哪里,以及如何访问要小写的数据?
谢谢.
Mic*_*ert 80
你应该覆盖属性writer:
class User < ActiveRecord::Base
def username=(val)
write_attribute(:username, val.downcase)
end
end
Run Code Online (Sandbox Code Playgroud)
小智 51
您可以在User模型中使用ActiveRecords回调之一,例如:
before_save { |user| user.username = user.username.downcase }
Run Code Online (Sandbox Code Playgroud)
Jam*_*her 16
在您的用户模型(models/user.rb)中,利用ActiveRecord回调:
before_save do
self.username = self.username.downcase
end
Run Code Online (Sandbox Code Playgroud)
我花了一段时间查找一个阻止我使用此代码的错误.每次我尝试拦截属性并false在保存之前将其更改为我的数据库都会回滚.
我在这里贡献我的答案,因为这个帖子是完成此任务的第一个Google结果,但没有涵盖整个返回的false问题.
如果您的任何回调返回,则false所有内容都将在数据库中回滚.
我试图将要创建的商品设置为不在数据库中接受或@offer.accepted = false.问题是这一行导致整个方法返回false并回滚整个过程.
我在一个隐含的回报折腾修好了true之后
有效的代码:
before_save {|offer| offer.accepted = false; true}
外卖:false如果您希望它们成功,您的回调将无法返回.
来源:rails 3:我需要在before_save回调中返回true才能使object.save工作吗?