在 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!
我有一个应用程序设置了一个 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!