Rails Carrierwave:无法使用after_action方法

时间:2017-08-08 21:16:36

标签: ruby-on-rails carrierwave

我想使用CarrierWave gem在rails应用中保存上传图片的完整网址。我在创建操作之后更新条目,但它不起作用。但是,当我输入我的变量时,会显示完整的URL,但它只保存标识符...

Card控制器,after_action方法:

class CardsController < ApplicationController
  before_action :set_card, only: [:show, :edit, :update, :destroy]
  after_action :save_full_image_url, only: [:create, :update]

  include Shortener
  require 'carrierwave/orm/activerecord'

  def save_full_image_url
    c = @card
    puts "URL: "+c.image_url.url

    @card.update(image_url: c.image_url.url)

    Rails.logger.info(@card.errors.inspect)
  end

我的卡片型号:

class Card < ApplicationRecord
  validates :cta_button_url, :format => URI::regexp(%w(http https)), presence: { message: '%{value} : please enter valid url' }
  validates :title, :subtitle, :cta_button_text, :cta_button_url, :presence => true
  mount_uploader :image_url, ImageUploader
  has_one :short_url
end

我的完整日志:

  

SQL(0.3ms)INSERT INTO“cards”(“letter_id”,“title”,“subtitle”,   “image_url”,“cta_button_text”,“cta_button_url”,“share_button”)   VALUES(?,?,?,?,?,?,?)[[“letter_id”,49],[“title”,   “fsddssd”],[“subtitle”,“fsdfsdfsd”],[“image_url”,“10298593.jpg”],   [“cta_button_text”,“访问网站”],[“cta_button_url”,   “http://www.testurl.com”],[“share_button”,“t”]](1.1ms)提交   事务(0.1ms)开始事务卡加载(0.2ms)SELECT   “卡片”。*​​ FROM“卡片”在哪里“卡片”。“id”=?限制? [[“id”,44],   [“LIMIT”,1]] SQL(0.4ms)INSERT INTO“short_urls”(“card_id”,   “token”,“created_at”,“updated_at”)VALUES(?,?,?,?)[[“card_id”,   44],[“token”,“PmK5vnuCU9Dczz995fz8Ddbf”],[“created_at”,“2017-08-08   21:08:57.625325“],[”updated_at“,”2017-08-08 21:08:57.625325“]]
  (0.8ms)提交事务字母加载(0.2ms)SELECT“字母”。*   FROM“letters”WHERE“letters”。“id”=?限制? [[“id”,49],   [“LIMIT”,1]](0.1ms)开始事务CoreBot Load(0.2ms)   选择“core_bots”。* FROM“core_bots”WHERE“core_bots”。“id”=?   限制? [[“id”,1],[“LIMIT”,1]](0.1ms)提交事务   重定向到http://localhost:3000/dashboard/test网址:   http://localhost:3000/uploads/card/image_url/44/10298593.jpg
  (0.1ms)开始事务SQ​​L(0.4ms)更新“卡”SET   “image_url”=?在哪里“卡”。“id”=? [[ “IMAGE_URL”,   “10298593.jpg”],[“id”,44]](2.5ms)提交事务

           

“10298593.jpg”,cta_button_text:“访问网站”,cta_button_url:   “http://www.testurl.com”,share_button:true&gt;,@ messages = {},   @details = {}&GT;完成302发现在60ms(ActiveRecord:7.2ms)

当我登录控制台“c.image_url.url”时,我获得了完整的URL(http://localhost:3000/uploads/card/image_url/44/10298593.jpg)但是当我更新我的条目时,它只保存了结尾(10298593.jpg)。

任何想法为什么我无法保存整个网址,即使我之前可以在变量中获取它?

1 个答案:

答案 0 :(得分:0)

问题解决了!问题来自mount_uploader :image_url, ImageUploader

我创建了一个&#34; remote_image_url&#34;并使用完整的URL更新它。现在它有效!