0

私はレールアプリを持っています。サーバーに写真をアップロードするために gem:paperclip を使用しています。私がやろうとしているのは、perams ハッシュからの情報を使用して、サーバー上にフォルダー構造を作成することです。以下のコードを参照してください。

フォトコントローラー.rb

 # POST /photos
 # POST /photos.json
 def create

 @photo = Photo.new(params[:photo])
 @photo.lat = params["photo%5Blat%5D"].to_s
 @photo.lng = params["photo%5Blng%5D"].to_s
 @photo.description = params[:description]
 @photo.takenby = params[:takenby].to_s

 @photo.save

 puts "photos/create photos.inspect= #{@photo.inspect}"



 end

写真.rb

 class Photo < ActiveRecord::Base


 attr_accessible :lat, :lng, :image
 vendor = params[:description]
 owner = params[:owner]
 Paperclip.interpolates :prefix  do |attachment, style|
 "#{owner}/#{Date.today.to_s }/#{vendor}"
 end


has_attached_file :image,
                :path => ":prefix/:basename.:extension",
                :styles => { :thumbnail => "57x57", :original => "100x100" },
                :storage => :s3,
                :s3_credentials => S3_CREDENTIALS

ただし、サーバー コンソールでこのエラーが発生します。

 Started GET "/photos?lat=37.785834&lng=-122.406417" for 127.0.0.1 at 2012-09-26 
  21:08:57 -0700
 21:08:57 web.1  | Processing by PhotosController#index as JSON
 21:08:57 web.1  |   Parameters: {"lat"=>"37.785834", "lng"=>"-122.406417"}
 21:08:57 web.1  | Completed 500 Internal Server Error in 4ms
 21:08:57 web.1  | NameError (undefined local variable or method `params' for #<Class:0x007fb7d4fa3320>):
 21:08:57 web.1  |   app/models/photo.rb:23:in `<class:Photo>'
 21:08:57 web.1  |   app/models/photo.rb:18:in `<top (required)>'
 21:08:57 web.1  |   app/controllers/photos_controller.rb:14:in `index'

ペーパークリップが正しいフォルダー構造でサーバーに画像を保存するには、モデルで何を変更する必要がありますか?


これは私の問題を解決しました:

 photo.rb 

 Paperclip.interpolates :prefix  do |attachment, style|
 "#{attachment.instance.takenby}/#{Date.today.to_s }/#{attachment.instance.description}"
 end 

しかし、これにより新たな問題が発生しました。異なるサイズの画像を保存することはできなくなりました。それ、どうやったら出来るの?

4

4 に答える 4

3

この方法では、クラス Photo の params ハッシュにアクセスできません。

vendor = params[:description]
owner = params[:owner]

説明の例:

1) まず、config/initializers/paperclip.rb ファイルを作成し、以下を追加します。

Paperclip.interpolates :description do |attachment, style|
  attachment.instance.description # or other attribute
end

2) 次に、

has_attached_file :image,
                  :path => ":description/:basename.:extension",
                  :styles => { :thumbnail => "57x57", :original => "100x100" },
                  :storage => :s3,
                  :s3_credentials => S3_CREDENTIALS

3) 詳細については、次の記事を参照してください。

于 2012-09-27T05:04:04.083 に答える
0

$railsgペーパークリップの投稿写真

$ rake db:migrate

Post.rbに移動し、以下を追加します。

attr_accessible:photo has_attached_file:photo、:styles => {:small => '150x150'、:normal => '400x400'}、:path => ":rails_root / public / system /:attachment /:id /:style / :filename "、:url =>" / system /:attachment /:id /:style /:filename "

_form.html.erbを開き、書き換えは次のとおりです。

<%= form_for (@post) do |f| %>

に:

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

これに追加するのは_formthisです:

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

Index.html.erb:

Show.html.erbで:
于 2012-09-27T08:06:31.180 に答える
0

paramsモデルからアクセスできないため、これらの割り当ては失敗します。

ベンダーと所有者が写真の属性である場合は、作成アクションでそれらを割り当てるだけです。params[:photo]不必要な割り当てを削減するために、Photo モデルのすべての値が に含まれるようにフォームを変更することをお勧めします。

于 2012-09-27T05:08:57.230 に答える
0

モデルのパラメーターに直接アクセスすることはできません。それらにアクセスしたい場合は、params をパラメーターとして、モデルで宣言されているメソッドに渡すことができます。

コントローラーで、

obj.set_values(params)

モデルで、する

def set_values(params)
  self.vendor = params[:description]
  self.owner = params[:owner] 
end

モデルを保存する前に補間コードを呼び出します。

于 2012-09-27T05:02:07.960 に答える