在 Wicked Wizard Rails 4.2 中实现 Carrierwave_direct

Implement Carrierwave_direct in Wicked Wizard Rails 4.2

我有一个应用程序设置了一个 Wicked Wizard 表单来创建一个新的 post。 最后一步允许用户将图片上传到他们的 post。 对于图像处理,我使用的是 Carrierwave 和 Fog(因为我在 heroku 上托管网站并且我使用 Amazon S3 进行存储)。 一切正常,但上传到 Amazon S3 非常慢。

遵循 Ryan Bates 的上传到 Amazon S3 railscast (http://railscasts.com/episodes/383-uploading-to-amazon-s3) I tried Carrierwave_Direct (https://github.com/dwilkie/carrierwave_direct) 以加快上传到 Amazon S3 的缓慢速度。

然而,在执行此操作时,出现错误:

NoMethodError in PostSteps#show

Showing    
/Users/petersonneveld/rails_projects/doamer/doamer2/app/views/property_steps/picture.html.erb where line #1 raised:

undefined method `direct_fog_url' for nil:NilClass

我真的不知道该怎么做才能解决这个问题。有人有建议吗?非常感谢您的帮助!

在我的邪恶巫师形态的最后一步

# app/views/post_steps/picture.html.erb

<%= direct_upload_form_for @uploader, url: wizard_path do |f| %>
  <div class="panel panel-default">
    <div class="panel-heading">
      <div class="panel-title">
        <h2>Let's post some pictures!</h2>
      </div>
    </div>
  <div class="panel-body">
    <% if @post.errors.any? %>
      <div id="error_explanation">
        <h2><%= pluralize(@post.errors.count, "error") %> prohibited this post from being saved:</h2>
        <ul>
          <% @post.errors.full_messages.each do |message| %>
            <li><%= message %></li>
          <% end %>
        </ul>
      </div>
    <% end %>

      <div class="form-group col-md-12">
        <%= f.label :image, "Upload image" %><br>
        <%= image_tag(@post.image_url(:thumb)).to_s if @post.image? %>
        <%= f.file_field :image %>
      </div>

      <div class="form-group col-md-12">
        <%= f.label :remote_image_url, "or paste image URL" %>
        <%= f.text_field :remote_image_url, class: "form-control" %>
        <%= f.hidden_field :image_cache %>
      </div>

      <div class="form-group col-md-12">
        <h4><%= f.check_box :remove_image %> 
        <span class="label label-danger">Remove image</span></h4>
      </div>

      <div class="form-group col-md-12">
        <%= f.button "Finish", class: "btn btn-primary", data: {disable_with: "<i class='fa fa-spinner fa-spin'></i> Saving post..."} %>
      </div> 
    </div>
  </div>
<% end %>

在我的控制器中

# app/controllers/post_steps_controller.rb

class PostStepsController < ApplicationController
include Wicked::Wizard
steps :description, :picture

def show
  @post = Post.find(params[:post_id])
  render_wizard
end

def update
  @post = Post.find(params[:post_id])
  @post.update_attributes(post_params)
  render_wizard @post
end

private

def post_params
  params.require(:post).permit(...)
end

def redirect_to_finish_wizard(options = nil)
  redirect_to @post, notice: "Thanks for submitting a post."
end
end

我的 post 控制器创建操作

# app/controllers/post_controller.rb

def create
  @post = current_user.posts.build(post_params)
    if @post.save
      redirect_to post_steps_path(:id => "description", :post_id => @post.id)
    else
      render :new
    end
end

找到答案:必须更新 'aws-sdk' gem!