ruby on rails - Refinerycms how to upload image to events, but the image saved to refinery_images table -
newbie in rails,
i'm trying use refinerycms in rails app, refinery available upload images database, i'm trying combine extension use, "events" extension, when create new events should create 2 object, events refinery_event table have image_id foreign key images id, , event image attribute saved refinery_images,
i've add migrations image_id column refinery_event , put relation event.rb models
belongs_to :image_id, :class_name => '::refinery::image'
add in event_controller.rb
def image_params params.require(:event).permit(:image_name, :image_size, :image_width, :image_height, :created_at, :updated_at) end def new @event = event.new @image_id = refinery::image.new end def create @event = event.new(event_params) @image_id = refinery::image.new(image_params) if @event.save begin mailer.notification(@event, request).deliver_now rescue => e logger.warn "there error delivering event notification.\n#{e.message}\n" end if event.column_names.map(&:to_s).include?('email') begin mailer.confirmation(@event, request).deliver_now rescue => e logger.warn "there error delivering event confirmation:\n#{e.message}\n" end else logger.warn "please add 'email' field event if wish send confirmation emails when forms submitted." end redirect_to refinery.thank_you_events_events_path else render :action => 'new' end end def event_params params.require(:event).permit(:nama, :deskripsi, :periode_start, :periode_end, :lokasi, :jumlah, :gender_id, :age_id, :event_types_id, :des_acara, :key_kata, :tipe_sponsor, :dana, :exposure, :enggagement, :image_id) end
and form looks like,
<%= form_for [refinery, :events, @event], :html => { :multipart => true } |f| %> <%= render '/refinery/admin/error_messages', :object => @event, :include_object_name => true %> <div class='field nama_field string_field'> <%= f.label :nama %> <%= f.text_field :nama %> </div> <div class='field deskripsi_field text_field'> <%= f.label :deskripsi %> <%= f.text_area :deskripsi, :rows => 8 %> </div> <div class="field"> <p> <%= f.file_field :image_id %> </p> </div> <div class='actions'> <%= f.submit t('.send') %> </div> <% end %>
and i'm stuck else ? how make form work? can teach me?
thanks..
as answered here: https://groups.google.com/forum/#!msg/refinery-cms/5rbad079ipc/nvfgkdnfaqaj
you can use built in image picker, can see if use generator:
$ rails generate refinery:engine event nama:string deskripsi:text image:image
this creates following admin controller:
module refinery module events module admin class eventscontroller < ::refinery::admincontroller crudify :'refinery/events/event', :title_attribute => 'nama' private # allow trusted parameter "white list" through. def event_params params.require(:event).permit(:nama, :deskripsi, :image_id) end end end end end
and following template:
<%= form_for [refinery, :events_admin, @event] |f| -%> <%= render '/refinery/admin/error_messages', :object => @event, :include_object_name => true %> <div class='field'> <%= f.label :nama -%> <%= f.text_field :nama, :class => 'larger widest' -%> </div> <div class='field'> <%= render '/refinery/admin/wysiwyg', :f => f, :fields => [:deskripsi], :object => "events/event" -%> </div> <div class='field'> <%= f.label :image -%> <%= render '/refinery/admin/image_picker', :f => f, :field => :image_id, :image => @event.image, :toggle_image_display => false -%> </div> <%= render '/refinery/admin/form_actions', :f => f, :continue_editing => false, :delete_title => t('delete', :scope => 'refinery.events.admin.events.event'), :delete_confirmation => t('message', :scope => 'refinery.admin.delete', :title => @event.nama) -%> <% end -%> <% content_for :javascripts -%> <script> $(document).ready(function(){ page_options.init(false, '', ''); }); </script> <% end -%>