2012-04-02 9 views
1

私は初心者レベルです。そして、私はイメージのURLを取得できません(私は方法を知らない)。 https://github.com/Atlantia/tinymce-rails-imageuploadRoR tinymce-rails-imageupload URLを取得

1.Controller

class TinymceAssetsController < ApplicationController 
    def create 
    DataFile.save(params[:file]) 

    render json: { 
    image: { 
     url: view_context.image_url(image) 
    } 
end 
} 

2.Model

class DataFile < ActiveRecord::Base 
    def self.save(file) 
    name = file.original_filename 
    #create the file path 
    path = File.join(directory, name) 
    #write the file 
    File.open(path, "wb") { |f| f.write(file.read) } 
    end 
end 

ファイルが保存されているが、私は、URL ...助けを 感謝を取得する方法がわかりません。

私はペーパークリップで行うことに決めました。しかし問題がある。

class DataFile < ActiveRecord::Base 
    has_attached_file :file, styles: { medium: "300x300>", thumb: "100x100>" } 
end 

class TinymceAssetsController < ApplicationController 
    def create 
    @datafile.update_attributes(file: params[:file]) 

    render json: { 
    image: { 
     url: @datafile.file.url(:medium) 
    } 
    } 
    end 
end 

NoMethodError(nilのための未定義のメソッド `update_attributes':NilClass)

と別の質問: 私はスタイルを指摘しなかった場合、画像は元のサイズを持っているのだろうか?

答えて

0

あなたがリンクした宝石のソースを見ると、TinyMCEでリンクするだけでファイルの保存/処理を処理するようには見えません。

私はその後、あなたはそれにupdate_attributesでファイルオブジェクトを渡すことができます(https://github.com/thoughtbot/paperclip)ペーパークリップで

class Datafile < ActiveRecord::Base 
    has_attached_file :file, :styles => { :medium => "300x300>", :thumb => "100x100>" } 
end 

を宝石を組み合わせることをお勧めしたい:

@datafile.update_attributes(:file => params[:file]) 

をしてとビューでそれを呼び出します

@datafile.file.url(:medium) 

自分で処理したい場合は、yに保存されますディレクトリ内の私たちのファイルシステム/ユーザーからの元のファイルの名前...おそらく注射の攻撃や悪いファイル名にあなたを残す!自分で生成する場合は、Dirクラスを使用して、正しいファイル名のファイルシステムを調べることができます。

EDIT

さて、質問に改正与えられ、ここであなたのコントローラコードがどのように見えるかです:あなたの例では

class TinymceAssetsController < ApplicationController 
    def create 
    @datafile = DataFile.create(file: params[:file]) 


     render json: { 
     image: { 
      url: @datafile.file.url(:medium) 
     } 
     } 
    end 
end 

、あなたは@datafileオブジェクトをインスタンス化していないので、それはですなし。 DataFileをデータベースから取り出したり、インスタンス化したりする必要があります。基本的に、Paperclipはファイルの処理を抽象化しているので、通常の属性のようです。あなたはまだそれが属性であるというデータベースなどのオブジェクトを作成する必要があります!ここ

+0

非常にまれに使用する画像をアップロードします。 Dirクラスについては、実装するのが正しいのですか?ありがとうございました。 – user1309082

+0

Paperclipは一般的なファイルのアップロードを処理します。ちょうどスタイルハッシュを渡さないでください。ファイルを保存してそれを取得します。 'Dir.entries(" mydirname ")'はディレクトリ内のファイル名のリストを提供しますので、本当に自分自身でやりたいのであれば、ユーザー用のすべてのファイルをサブディレクトリ( "uploads/#{self.id}/")、データベースに触れずにファイルのリストを検索する必要がある場合は、Dir.entriesを使用します。もう一度、適切なアップロード管理の宝石を使用してあなたを強調したいと思います! –

+0

Joe、Paperclipを手伝ってもらえますか? NoMethodError(未定義メソッド 'update_attributes 'for nil:NilClass)。ありがとうございました。 – user1309082

1

はトンボ..宝石 'トンボ'、 '0.9.12' https://github.com/markevans/dragonfly/

1.controller

class TinymceAssetsController < ApplicationController 

    def create 
    @image = StaticImage.new(:page_image => params[:file]) 
    @image.save  
    render json: { 
     image: { 
     url: @image.page_image.url 
     } 
    }, content_type: "text/html" 
    end 
end 

2を使用したソリューションです。モデル

class StaticImage < ActiveRecord::Base 
    image_accessor :page_image 
    attr_accessible :page_image 
end 
0

私はそれを次のように行った:

コントローラー:画像公開/画像/アップロードにファイルを保存し

class Image 

    def self.save(file) 
    name = file.original_filename 
    #create the file path 
    write_path = File.join(Rails.root,'public','images','upload', name) 
    return_path = File.join('upload', name) 
    #write the file 
    File.open(write_path, "wb") { |f| f.write(file.read) } 
    return_path 
    end 

end 

を保存するための

# For uploading images frm TinyMCE 

class TinymceAssetsController < ApplicationController 
    def create 
    # Take upload from params[:file] and store it somehow... 
    # Optionally also accept params[:hint] and consume if needed 

    image=Image.save(params[:file]) 
    render json: { 
     image: { 
     url: view_context.image_url(image) 
     } 
    }, content_type: "text/html" 
    end 
end 

モデルTinymceによって正しいURLを正しく挿入します。

関連する問題