2013-10-16 11 views
10

Jestem więc zapoznanie się z obu szyn i szyn kursu 4.Jak wprowadzić zmiany do silnych zmian do parametrów (małymi literami)

Więc to, co mam na dnie mojego kontrolera

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

Co działa dobrze, ale chciałbym to zrobić, aby uzyskać dostęp do tych parametrów indywidualnie w metodzie post_params lub później w kontrolerze.

W szczególności chciałbym zmienić wartość kategorii: na małe litery przed użyciem parametru przy tworzeniu posta (tak, aby w tabeli wszystkie kategorie były pisane małymi literami).

EDYCJA: być może lepszym sformułowaniem na moje pytanie jest, po zezwoleniu na parametry, jak mogę uzyskać do nich dostęp i potem nimi manipulować. Czy mogę po prostu używać params [: title] jak zwykle?

Próbowałem

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

i

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

Ale pojawia undefined method 'downcase'

Odpowiedz

7

Better Można użyć before_create zwrotnego zaktualizować wartość.

jak,

before_create :check_params 

def check_params 
    self.category.downcase!  
end 
+0

Musisz użyć! operator ... ale nie zaktualizuje się. –

7

Funkcja strong_params tylko o dawanie kontroler jest „białej listy” zmiennych pracować. To naprawdę ze względów bezpieczeństwa, i dosłownie oznacza tylko, że twoja aplikacja może uzyskać dostęp do parametrów [: allowed_param], aby zapisać dane.


Są 2 rzeczy można zrobić:

-> Edycja params [: kategorii] zmienną przed wywołaniem funkcji post_params:

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

-> Można użyć funkcja before_create zalecane przez @thiyaram też :)

+1

Jest to zdecydowanie najbardziej przydatna odpowiedź (w moim przypadku co najmniej). – dsignr

+1

jeśli '.downcase' nie jest trwałe, spróbuj' .downcase! ' –

+0

dodając! zrobiłem to.Ale działało to tylko wewnątrz metody tworzenia, a nie wewnątrz post_paramów, które również miałem ... Nie wiem dlaczego. – George

1

Należy: -

before_create :downcase_category 

def downcase_category 
self.category.downcase! 
end 
+0

nie powinieneś używać wywołań zwroty szyn w ten sposób – gazubi

+0

@bob_d Ciekawy - dlaczego nie? –

2

Jeśli korzystasz z Rails 4, to może nie działać: parametry, które modyfikujesz, nie są już akceptowane, nawet jeśli jawnie dodasz je do białej listy za pomocą silnych paramerów.

Wygląda na to, że Rails wykrywa zmianę i uniemożliwia jej dopuszczenie.

Prawdopodobnie lepszym sposobem jest pobranie wartości z parametrów w akcji kontrolera i ich małe litery:

a = params([:model_name][:id]) 
a.downcase! 
Powiązane problemy