Borys P. Rashba
Borys P. Rashba

Reputation: 11

RefineryCMS, Upload Image on FrontEnd side

Sorry about quite silly question but after several days of searching I still don't have the answer and I'm realy stackoverfloved about it.

I have refinerycms extension. Like this:

$ rails generate refinery:engine shop name:string logo:image

I want it to be controlled from both backend and frontend of my application. Have no problems with backend. (Thank you for refinerycms team.) Have no problems with frontend when the form contains only "name". (Or any other attribute that doesn't have image type).

Have problems with image type attributes.

I don't want frontend user to have the same image editing form as backend users does. I want the form to be smth like this:

<div class='field'> 
  <%= f.label :logo , "Logo"%>
  <%= f.file_field :logo %>  
</div> 

And I want images loaded by frontend user to be saved with Refinery::Image.

I bet the problem is only in my frontend controller create action for shops, but I have no clue how it should be overwritten.

Thanks a lot for any suggestion.

Upvotes: 1

Views: 599

Answers (2)

Michal Tuček
Michal Tuček

Reputation: 1

I have FE form with file_field (:logo) on FE and in my normal controller (not the admin one) I have this method to handle params from request:

def model_params
    permitted = params.require(:model).permit!
    permitted[:logo] = Refinery::Image.create(image: permitted[:logo])
    return permitted
 end

to permits params and create image form file.

And then in my create method:

def create
    if (@new_beer = ::Refinery::Models::Model.create(model_params))
      #do some stuff when it succeeds to create it
      redirect_to SOMEWHERE
    else
      redirect_to SOMEWHERE, notice: "Something went wrong!"
    end
  end

Hope it can help! :)

Upvotes: 0

Giulian Drimba
Giulian Drimba

Reputation: 21

In the controller, you will have to pass the 'logo' param to the model as a Refinery::Image instance. To do so, you create an instance of Refinery::Image and merge it to the model.

Example:

logo = Refinery::Image.create(image: params[:shop][:logo])

@shop = Refinery::Shops::Shop.create(params[:shop].merge({logo: logo}))

Upvotes: 2

Related Questions