ruby - 更改参数[ :link] before @link. 保存

标签 ruby ruby-on-rails-3

我想在保存之前更改从输入字段中获取的值。

params[:link]['url'] = "www.facebook.com/redbull"

现在我只想将“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

最佳答案

我会投票赞成在模型中尝试使用 before_save 或 after_validation 回调来运行您创建的自定义方法。您还可以将 (:on => :create) 添加到 before_save 回调,这样它就不会在更新时运行。

有点像

class Thing < ActiveRecord::Base
before_save :clean_link

def clean_link
  self.link = self.link.split('facebook.com/').last 
end

如果需要,请务必设置任何用于访问链接的 getter 或 setter。我在 Rails 3 应用程序中做了类似的事情我在 here 上做了一些工作

关于ruby - 更改参数[ :link] before @link. 保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5882019/

相关文章:

ruby-on-rails - 在 Rails 中使用 google-maps-for-rails gem 时设置标记颜色

mysql - 无法输出涉及 Sequel 中日期的 MySQL 表

ruby - 为什么 bundler 选择了错误的 ruby​​ 版本?

ruby - 如何在 Ruby 1.9 中读取文件中的字节?

ruby-on-rails - 使用 Carrierwave 和 Rails 3 是否可以使用相同的 uploader 很好地管理图像和非图像文件?

mysql - Rails 3 自动创建联接表关联

ruby-on-rails - 没有路由匹配 service-worker.js

ruby-on-rails - 升级到 Rails 4.2.0.rc3 后,ActiveModel 序列化器不再工作

ruby-on-rails - Ruby on Rails Routes - get 和 match 之间的区别

ruby-on-rails - 如何在 ruby​​onrails 上将数据从模型导出到 excel 文件