2016-06-17 3 views
0

У меня есть приложение Rails 4, и я использую CarrierWave для захвата изображения с URL-адреса. В моем form_for URL-адрес передается в params просто отлично, но я не могу получить URL-адрес для сохранения. Когда я смотрю на последние Stamp сохранен, remote_image_url - nil. Я уверен, что это что-то простое, но документация довольно горькая.CarrierWave remote_image_url не сохраняет

И только для подтверждения; CarrierWave отлично работает при загрузке изображения из файла с помощью f.file_field в форме.

Вот мой код:

stamp_uploader.rb:

class Stamp < ActiveRecord::Base 
    mount_uploader :image, StampUploader 
    mount_uploader :remote_image_url, StampUploader 
end 

stamps_controller:

def show 
    @stamp = Stamp.find(params[:id]) 
end 

def new 
    @stamp = Stamp.new 
end 

def create 
    @stamp = Stamp.create(stamp_params) 

    if @stamp.save 
     flash[:success] = "Thanks for your submission!" 
     redirect_to root_path 
    else 
     render :new 
    end 
end 

private 

def stamp_params 
    params.require(:stamp).permit(:image, :remote_image_url) 
end 

new.html.erb:

<%= form_for @stamp do |f| %> 
    <%= image_tag(current_user.image) %> 
    <%= f.label :remote_image_url, "Upload Image" %> 
    <%= f.text_field :remote_image_url, value: current_user.image %> 

    <%= f.submit %> 
<% end %> 

schema.rb:

create_table "stamps", force: :cascade do |t| 
    t.string "image" 
    t.datetime "created_at",  null: false 
    t.datetime "updated_at",  null: false 
    t.string "remote_avatar_url" 
    t.string "remote_image_url" 
end 

Титулы:

=> {"utf8"=>"✓", 
"authenticity_token"=>"rA8KaI+bG5ygldeQC2n00z3BuEfiA0xO4tukUUL3tvG19G7WQCuMMqwzwWzWSMbKlT+2W5KsJYF4Q/lXg9OHeA==", 
"stamp"=>{"remote_image_url"=>"https://graph.facebook.com/10157057736060574/picture?width=1000&height=1000"}, 
"commit"=>"Create Stamp", 
"controller"=>"stamps", 
"action"=>"create"} 
+0

Можете ли вы опубликовать параметры, которые получает ваш контроллер (от консоли рельсов)? – RichardAE

+0

Несомненно, добавлено к основному вопросу – BillyBib

ответ

0

Я думаю, что ваша линия mount_uploader :remote_image_url, StampUploader это то, что портит его. Попробуйте удалить его и посмотреть, все ли работает.

Когда вы делаете mount_uploader :foo, StampUploader, я считаю, что CarrierWave определяет (помимо всего прочего) foo= и remote_foo_url= методы для вас.

Поэтому, когда вы позже сделаете mount_uploader :remote_image_url, StampUploader, вы переписываете метод remote_image_url=, который вы только что получили с другим методом, который, несмотря на его имя, ожидает файл, а не URL-адрес.

Если это поможет, могу ли я предложить вам оплатить его, сделав запрос на перенос на CarrierWave, чтобы уточнить документы, если вы обнаружили, что они неясны? :)

+0

Да, отлично работает сейчас! Я удалил это 'mount_uploader', и я также удалил соответствующий столбец из базы данных, так как:: remote_image_url' использует столбец': image'. – BillyBib

Смежные вопросы