首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尽管有条件,Rails回调还是会触发?

尽管有条件,Rails回调还是会触发?
EN

Stack Overflow用户
提问于 2014-10-04 15:29:20
回答 1查看 30关注 0票数 0

如果有人能帮我的话,我对这个模型有很多问题。目前,无论何时启动update_attributes,我的代码似乎都会导致无限循环。我尝试了许多不同的组合来停止这种情况,但似乎都不起作用(除了非常低效的方法:( )

根据ActiveModel::Dirty,link_url_changed方法应该只在用户编辑链接时返回true,但由于某些原因,它总是返回true,并允许无限循环。怎样才能让它工作呢?

我真的很想1.在一个新的记录中,用户提交一个链接,它是有效的2.如果有效,一个回调调用来获得更多关于链接的信息。3.验证新信息,然后将其存储到数据库中。4.不再调用embedly!直到用户编辑link_url

下面是我的代码:

代码语言:javascript
复制
class ListLink < ActiveRecord::Base
    include ActiveModel::Dirty

    belongs_to :list
    default_scope -> {order('created_at DESC')}

    VALID_URL_REGEX = /\A(http:\/\/|https:\/\/|www|)[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(([0-9]{1,5})?\/.*)?\z/i
    validates :link_url, presence: true, format: {with: VALID_URL_REGEX} 
    validates :list_id, presence: true

    before_save :embedly, if: "link_url_changed?"
    #need to trigger embedly only when link_url changes

    validates :title, presence: true#, length:{minimum: 4, maximum: 200}
    validates :image_url, presence: true


  private
    def embedly
        logger.debug "embedly entered link changed!"
        #if self.errors.empty?
            embedly_api = Embedly::API.new :key => 'xxxxxxxxxxxxxxxxxxxxxxxxx',
                    :user_agent => 'Mozilla/5.0 (compatible; mytestapp/1.0; my@email.com)'
            #duplicate the url for use in the embedly API
            url = link_url.dup
            obj = embedly_api.extract :url => url

            update_attributes(:title => obj[0].title, :image_url => obj[0]["images"][0]["url"])
    end
end

非常感谢你的帮助!

EN

回答 1

Stack Overflow用户

发布于 2014-10-04 15:37:47

请不要在回调方法中使用update_attributes,它会触发新的保存。只需像这样更新模型:

代码语言:javascript
复制
self.title = obj[0].title
self.image_url = obj[0]["images"][0]["url"]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26190679

复制
相关文章

相似问题

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