0

ユーザーがオプションで画像の URL をアップロードできるアップロード画像ページを設定しようとしています。私はキャリアウェーブを使用しています

<%= form_for @rating, :html => {:multipart => true} do |f| %>

    <p>
      <%= f.file_field :pic_url %>
    </p>

    <p>
      <%= f.label :remote_pic_url_url, 'or image url' %>
      <br/>
      <%= f.text_field :remote_pic_url_url %>
    </p>

    <div class="actions">
      <%= f.submit 'Upload Picture', :class => 'btn btn-primary' %>
    </div>

モデル:

class Rating < ActiveRecord::Base
  attr_accessible :pic_url, :remote_pic_url_url, :rating

  mount_uploader :pic_url , ImageUploader
end

画像の URL だけを入力しようとすると、次のエラー メッセージが表示されます。 Pic url You are not allowed to upload "" files, allowed types: jpg, jpeg, gif, png

そのフィールドをオプションにするにはどうすればよいですか。remote_{columnName}_url私は、carrierwave に追加の URL フィールドを追加するための規則であるという印象を受けました。

コントローラーコード:

# POST /ratings
  # POST /ratings.json
  def create
    @rating = Rating.new(params[:rating])

    respond_to do |format|
      if @rating.save
        format.html { redirect_to @rating, :notice => 'Rating was successfully created.' }
        format.json { render :json => @rating, :status => :created, :location => @rating }
      else
        format.html { render :action => "new" }
        format.json { render :json => @rating.errors, :status => :unprocessable_entity }
      end
    end
  end
4

1 に答える 1

1

このスレッドを参照してください。

表示されるエラー ( You are not allowed to upload "" files, allowed types: jpg, jpeg, gif, png) は、次の場合と同じです。

@rating.remote_pic_url_url = "http://www.google.com"
@rating.save

ここでの問題は、Carrierwave が URL を開き、結果のファイルを で呼び出し、base_uri.pathが返される/ため、エラーが発生することです。拡張子のない URL を入力した場合は、これが原因です。

そうでない場合、なぜ機能しないのかわかりません。私は自分のプロジェクトで同じアプローチを使用しています (つまりremote_{columnname}_url、レコードを設定してから保存する) が正常に動作します。私は通常、拡張機能のホワイトリスト バリデーターを使用しませんが、1 つ追加したところ、(少なくともコンソールでは) 有効な URL (つまり、有効な拡張機能を持つ画像を指す URL) で問題なく動作します。

コンソールで以下の手順を試して、正しく保存されるかどうかを確認できますか? (有効な URL を JPG/GIF/PNG ファイルに挿入します):

@rating = Rating.new(remote_pic_url_url: 'http://...')
@rating.save
于 2012-11-30T00:15:11.243 に答える