在我在rails / ruby​​中创建记录之前调用param上的方法

时间:2013-05-12 18:24:39

标签: ruby-on-rails ruby ruby-on-rails-3

在我的链接控制器的create方法中,我调用以下内容来创建一个新链接,然后调用url属性上的方法来删除一些东西:

@link = Link.new(params[:link])
@link.url = strip_http(@link.url)

有没有办法组合这两个语句,所以我可以在/我发送到数据库之前调用url param上的strip_http方法?感觉效率更高,我可以将数据库调用减少一个。

1 个答案:

答案 0 :(得分:3)

实际上,当您未在对象上调用savecreate时,将不会进行任何数据库调用。 但你可以这样做:

params[:link][:url] = strip_http(params[:link][:url])
@link = Link.create(params[:link])

更好的解决方案是

在模型上使用回调:

class Link < Activerecord::Base
  before_save :strip_http

  def strip_http
    ...
  end
end

然后在你的控制器动作中:

@link = Link.create(params[:link])

在这种情况下别无他法。 :)