首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在@link.save之前更改params[:link]

在@link.save之前更改params[:link]
EN

Stack Overflow用户
提问于 2011-05-04 10:30:35
回答 4查看 3.1K关注 0票数 1

在保存输入字段之前,我希望更改输入字段中的值。

代码语言:javascript
复制
params[:link]['url'] = "www.facebook.com/redbull"

现在我只想把“红牛”放在数据库里。以下代码失败,因为它在验证之前更改了params[:link]。我想在有效的验证之后执行它。

代码语言:javascript
复制
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:

代码语言:javascript
复制
class Link < ActiveRecord::Base

  before_save(:on => :create) do
    self.url = self.url.split('facebook.com/').last 
  end
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-05-04 15:06:00

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

有点像

代码语言:javascript
复制
class Thing < ActiveRecord::Base
before_save :clean_link

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

如果需要,一定要设置访问链接的任何getter或setter。我在rails 3应用程序中做了类似的事情,我在这里上做了一些工作

票数 3
EN

Stack Overflow用户

发布于 2011-05-04 12:16:55

您能使用"after_validations“回调来进行更改吗?这应该在调用保存之前称为“后验证”。

http://ar.rubyonrails.org/classes/ActiveRecord/Callbacks.html#M000065

票数 1
EN

Stack Overflow用户

发布于 2011-05-04 10:47:40

代码语言:javascript
复制
@link = Link.new(:link => url)

代码语言:javascript
复制
@link = Link.new
@link.link = url

我假设您想要保存'redbull‘的属性在上面的代码中被命名为link。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5882019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档