Две модели.
Активы - используются для загрузки файлов со скрепкой.
class AddAttachmentsPhotoToAsset < ActiveRecord::Migration
def self.up
add_column :assets, :photo_file_name, :string
add_column :assets, :photo_content_type, :string
add_column :assets, :photo_file_size, :integer
add_column :assets, :photo_updated_at, :datetime
end
Доски - блог
class CreateBoards < ActiveRecord::Migration
def self.up
create_table :boards, :options => "AUTO_INCREMENT = 1000" do |t|
t.column :deliver_on, :datetime
t.column :time_zone, :string
t.column :header_text, :text
t.column :name, :string
t.column :age, :int, :default => "0"
t.column :template_id, :int, :default => "1", :null => false
t.column :photo, :string
t.timestamps
end
end
new.html.erb
В нижней части этой формы есть работа с ajax iframe. Пользователь может загрузить изображение и просмотреть его в форме перед отправкой. Поэтому не существует доски, которую можно сохранить для загрузки изображения. Поэтому мне пришлось создать объект актива.
<% form_tag(action, :id => "form") do %>
<%=image_tag board_image, :width => 140, :height => 166, :id => 'user_image' %><%= hidden_field :board, :photo, :id => 'image_name'%>
<%= error_messages_for :user,:board, :header_message => "" %>
<%= label_tag :name, "Friend's Name:", :class => "large"%>
<%= text_field :board, "name", :class => "large", :style => Board::NAME_WIDTH %>
.
.
.
<%=submit_tag "#{button_text}", :id => "board_submit"%>
<% end %>
Это должно быть за пределами другой формы, иначе оно не будет работать, поэтому у меня это здесь внизу после тега <% end%> другой формы.
Загрузка файла изображения в стиле iframe ajax.
<% remote_form_for(:asset, :url => { :controller => "asset", :action => "upload", :id => @tmp_id }, :html => { :method => :post, :id => 'uploadForm', :multipart => true }) do |f| %>
<%= f.file_field :photo, :class => 'file' %>
<% end %>
upload.js
//ajax file upload
$(function() {
$("#uploadForm input").change(function(){
$("#uploadForm").ajaxSubmit({
beforeSubmit: function(a,f,o) {
o.dataType = "json";
},
complete: function(XMLHttpRequest, textStatus) {
$('#user_image').attr('src', XMLHttpRequest.responseText +'?'+ new Date().getTime());
$('#image_name').attr('value', XMLHttpRequest.responseText);
return; false;
},
});
});
});
In assets_controller.rb
def upload
if params_posted?(:asset) #check that the form was submitted with a post action
@asset = Asset.new(params[:asset]) #create new paperclip object to upload item
@asset.save #upload the photo
render :text => @asset.photo.url #put the name on the form.
end
end
In board_controller
def create
...
@board.new(params[:board])
...
end
Файл загружается с объектом assets .
Файл хранится в таблице assets в базе данных
URL-адрес фотографии хранится в скрытом поле формы.
Доска создана, а URL фото хранится в таблице Доски.
Таким образом, я сохранил данные фотографии в двух таблицах, что кажется неправильным.
Я новичок, зеленый, как всегда.
Лучше ли хранить asset.id экземпляра Asset, используемого для загрузки изображений, вместо URL-адреса изображения в таблицу Board?
Для ясности:
Должен ли я иметь поле в моей таблице советов
t.column asset_id
а затем каким-то образом получить доступ к данным фотографии активов?
Заранее благодарю immensley за ваш опыт.