Ruby と Ruby on Rails は初めてです。
少し前に Best Buy で使用されていた古い BBYIDX Web サイトのバージョンを実装しています。アプリは Rails 2.3.11 に基づいているため、ファイルのアップロードに関する新しいチュートリアルの多くは役に立ちません。
ユーザーが選択した場合、ファイルをアップロードするオプションと、ユーザーの提案を含めることを検討しています。
controller で現在使用されているコード idea_controller.rb は次のとおりです。
def uploadFile
post = idea.save(params[:upload])
render :text => "File has been uploaded successfully"
end
モデル idea.rb で使用されるコードは次のとおりです。
attr_accessor :upload
def self.save(upload)
name = upload['idea'].original_filename
directory = 'public/data'
# create the file path
path = File.join(directory,name)
# write the file
File.open(path, "wp") { |f| f.write(upload['datafile'].read)}
end
ビュー ファイル _new.html.haml で使用されるコードは次のとおりです。
-# This partial shared by /ideas/new, home page, and drop-down.
= error_messages_for :idea
- remote_form_for :idea, :url => ideas_path, :action => 'uploadFile', :update => 'submit- idea', :has_example_text => true do |f|
- if defined?(current) && !current.nil?
=f.hidden_field :current_id, :id => "idea-current-id", :value=>current.id
- else
=f.hidden_field :current_id, :id => "idea-current-id"
#idea-title-group.form-group.inline
= f.label :title, "Idea"
= f.text_field :title, :example => 'My idea is...', :maxlength => 120, :size => 51, :id => "idea- title", :class => "input-text big"
#idea-description-group.form-group.inline
= f.label :description, "Description"
= f.text_area :description, :example => "I would like to suggest...", :id => "idea- description", :class => "input-textarea big", :rows => "7", :cols => "40"
#idea-title-group.form-group.inline
= f.file_field :upload
-#= f.submit "Upload file"
#idea-tags-group.form-group.inline
%label{:for => "tags"} Tags
= render :partial => 'ideas/tag_editor', :locals => { :f => f }
= submit_tag 'Share My Idea', :class => "input-submit big"
%p.note>
%strong.alert<>
Remember
, please keep it constructive!
アップロード コマンドは、f.file_field :upload 領域の下のフォームで発行されます。私のコードに問題はありますか? アプリを実行してファイルをアップロードしようとしても、問題やクラッシュは発生しませんが、ファイルはアップロードされません。ビューは希望どおりに表示され、マシン上のファイルを参照できるボックスが表示されますが、アップロードは行われません。
multipart => true の部分もどこかに追加する必要があることはわかっていますが、既存のリモートフォーム内でそれを実装する方法がわかりません。
自分が何をしているのか本当にわからないので、どんな支援も歓迎します。