Я работаю над веб-сайтом, который позволяет людям, управляющим компаниями типа "постель и завтрак", публиковать свои номера.
Я хотел бы потребовать, чтобы при размещении они указывали "изображение профиля" объекта., но я также хочу дать им возможность добавить больше изображений позже (это будет разработано позже).
Я подумал, что лучше всего будет использовать драгоценный камень Paperclip и иметь Жилье и фотографиюв моем приложении, позже принадлежащий к первому как ассоциация.
Новая фотография создается, когда они создают жилье.Имеет атрибуты id и Accommodation_id.Однако изображение никогда не загружается, и ни один из атрибутов Paperclip не устанавливается (image_file_name: nil, image_content_type: nil, image_file_size: nil), поэтому я получаю «отсутствующую» фотографию Paperclip.
Есть идеи на этот счет?Вот уже несколько дней я застреваю.
Проживание
модели / размещение.рб
class Accommodation < ActiveRecord::Base
validates_presence_of :title, :description, :photo, :thing, :location
attr_accessible :title, :description, :thing, :borough, :location, :spaces, :price
has_one :photo
end
контроллеры / Accommodation_controller.erb
class AccommodationsController < ApplicationController
before_filter :login_required, :only => {:new, :edit}
uses_tiny_mce ( :options => {
:theme => 'advanced',
:theme_advanced_toolbar_location => 'top',
:theme_advanced_toolbar_align => 'left',
:theme_advanced_buttons1 => 'bold,italic,underline,bullist,numlist,separator,undo,redo',
:theme_advanced_buttons2 => '',
:theme_advanced_buttons3 => ''
})
def index
@accommodations = Accommodation.all
end
def show
@accommodation = Accommodation.find(params[:id])
end
def new
@accommodation = Accommodation.new
end
def create
@accommodation = Accommodation.new(params[:accommodation])
@accommodation.photo = Photo.new(params[:photo])
@accommodation.user_id = current_user.id
if @accommodation.save
flash[:notice] = "Successfully created your accommodation."
render :action => 'show'
else
render :action => 'new'
end
end
def edit
@accommodation = Accommodation.find(params[:id])
end
def update
@accommodation = Accommodation.find(params[:id])
if @accommodation.update_attributes(params[:accommodation])
flash[:notice] = "Successfully updated accommodation."
render :action => 'show'
else
render :action => 'edit'
end
end
def destroy
@accommodation = Accommodation.find(params[:id])
@accommodation.destroy
flash[:notice] = "Successfully destroyed accommodation."
redirect_to :inkeep
end
end
просмотров / мест размещения / _form.html.erb
<%= form_for @accommodation, :html => {:multipart => true} do |f| %>
<%= f.error_messages %>
<p>
Title<br />
<%= f.text_field :title, :size => 60 %>
</p>
<p>
Description<br />
<%= f.text_area :description, :rows => 17, :cols => 75, :class => "mceEditor" %>
</p>
<p>
Photo<br />
<%= f.file_field :photo %>
</p>
[... snip ...]
<p><%= f.submit %></p>
<% end %>
Фото
Контроллер и представлениявсе так же, как когда Rails их генерировал.
models / photo.erb
class Photo < ActiveRecord::Base
attr_accessible :image_file_name, :image_content_type, :image_file_size
belongs_to :accommodation
has_attached_file :image,
:styles => {
:thumb=> "100x100#",
:small => "150x150>" }
end