Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to make changes to strong parameters (change to lowercase)

So I am familiarising myself with both rails and of course rails 4.

So this is what I have at the bottom of my controller

def post_params
  params.require(:post).permit(:title, :content, :category)
end

Which works fine, but what I would like to do is work out how to access those parameters individually either in the post_params method, or later in the controller.

Specifically I would like to change the :category value to lower case before making use of the parameter in creating the post (so that within the table all categories are in lowercase).

EDIT: perhaps a better phrasing to my question is, after permitting the parameters, how can i access and manipulate them afterwards..can I just use params[:title] as usual?

I have tried

params.require(:post).permit(:title, :content, :category)
params[:category].downcase

and

params.require(:post).permit(:title, :content)
params.require(:post).permit(:category).downcase

But I get undefined method 'downcase'

like image 702
Melbourne2991 Avatar asked Oct 16 '13 08:10

Melbourne2991


2 Answers

The strong_params function is just about giving your controller a "whitelist" of variables to work with. It's really for security purposes, and literally just means that your app can access params[:permitted_param] to save the data.


There are 2 things you could do:

--> Edit the params[:category] variable before you call the post_params function:

def create
    params[:category].downcase
    @post = Post.new(post_params)
    @post.save
end

--> You could use the before_create function as recommended by @thiyaram too :)

like image 102
Richard Peck Avatar answered Sep 29 '22 12:09

Richard Peck


Better You can use before_create callback to update the value.

like,

before_create :check_params

def check_params   
   self.category.downcase!     
end
like image 37
thiyaram Avatar answered Sep 29 '22 13:09

thiyaram