You mentioned that we should see everything in terms of the restful actions of create, replace, update and delete. So I was thinking back to an app that I just wrote that works with patient records. I have an upload feature to load in data from a zip file. There is a form to gather the file name and an “upload_file” method on the controller. Of course, I had to create a specific route.
So my thoughts were to see this as a type of create for patient records. If the value upload file is found in the params, then the create action would call the upload method, otherwise it would create a single patient record. Does that sound right?
If so, then how best to implement following the new best practices and conventions. For the view, I don’t believe I can do a form_for @patient because I am creating a collection of them.
<%= form_tag("/patients/", :method => “put”, :multipart=>true) do %>
This works and generates a post to patients. I would assume that I would need to pass “fileupload” switch as a hidden field with default value of true such as I am doing with the file name:
Thoughts or suggestions.
Looking at video 3, I see that I can modify the route to do as follows:
resources :patients do
post ‘upload’ => 'patients#upload’
This should post to the upload method of patients controller. The question is how to generate the form. If it was simply a button do the upload, I believe could put in the view:
<%= button_to 'UploadFile', upload_patients_path %>
The question is how best to do this with a form? I could do something like:
<%= form_tag("/patients/upload", :method => “put”, :multipart=>true) do %>
- Upload patient zip file:
- <%= file_field_tag(:file)%>
- <%= submit_tag(“Upload”, ‘class’ => “btn btn-success”) %>
<% end %>
But perhaps there is a cleaner way to do this.
I would probably make importing from zip a separate controller with its own creat action that handles this case specifically.
PatientImportController. Then you can easily see that there’s probably a model (or plain ruby object) you can creat that simply takes the file and does all the work. Your controller becomes really simple.
Hope this helps.
Derek, I think you are right. It definitely gets the philosophy of small simple objects that Sandi Metz promotes and even spoke on our Ruby meetup this past week.