在保存输入字段之前,我希望更改输入字段中的值。
params[:link]['url'] = "www.facebook.com/redbull"现在我只想把“红牛”放在数据库里。以下代码失败,因为它在验证之前更改了params[:link]。我想在有效的验证之后执行它。
def create
url = params[:link]['url'].split('facebook.com/').last
params[:link]['url'] = url
@link = Link.new(params[:link])
if @link.save
flash[:success] = 'Link was successfully created.'
redirect_to root_path
else
render 'new'
end
end提前感谢
现在起作用了,告诉caley:
class Link < ActiveRecord::Base
before_save(:on => :create) do
self.url = self.url.split('facebook.com/').last
end发布于 2011-05-04 15:06:00
我会投票赞成在模型中尝试一个before_save或after_validation回调来运行您创建的自定义方法。您还可以将(:on => :create)添加到before_save回调中,这样它就不会在update上运行。
有点像
class Thing < ActiveRecord::Base
before_save :clean_link
def clean_link
self.link = self.link.split('facebook.com/').last
end如果需要,一定要设置访问链接的任何getter或setter。我在rails 3应用程序中做了类似的事情,我在这里上做了一些工作
发布于 2011-05-04 12:16:55
您能使用"after_validations“回调来进行更改吗?这应该在调用保存之前称为“后验证”。
http://ar.rubyonrails.org/classes/ActiveRecord/Callbacks.html#M000065
发布于 2011-05-04 10:47:40
@link = Link.new(:link => url)或
@link = Link.new
@link.link = url我假设您想要保存'redbull‘的属性在上面的代码中被命名为link。
https://stackoverflow.com/questions/5882019
复制相似问题