Création du modèle Rails ActiveRecord à partir de params hash
La plupart des Rails de tutoriels montrent comment remplir un modèle de classe via les paramètres de hachage comme suit:
class UsersController < ApplicationController
def create
@user = User.create(params[:user])
# more logic for saving user /redirecting /etc.
end
end
Cela fonctionne très bien si tous les attributs de votre modèle sont censés être des chaînes de caractères. Cependant, qu'advient-il si certains de ces attributs sont censés être des entiers ou des dates ou d'un autre type?
Par exemple, imaginons que l'Utilisateur de la classe ressemble à ceci
class User < ActiveRecord::Base
attr_accessible :email, :employment_start_date, :gross_monthly_income
end
L' :e-mail attribut doit être une chaîne de caractères, l' :employment_start_date attribut doit être une date, et l' :gross_monthly_income doit être un nombre décimal. Pour que ces attributs du type correct, ce que je dois changer mon contrôleur de l'action à ressembler à quelque chose comme ceci à la place?
class UsersController < ApplicationController
def create
@user = User.new
@user.email = params[:user][:email]
@user.employment_start_date = params[:user][:employment_start_date].convert_to_date
@user.gross_monthly_income = params[:user][:gross_monthly_income].convert_to_decimal
# more logic for saving user /redirecting /etc.
end
end
source d'informationauteur Kevin Pang
Vous devez vous connecter pour publier un commentaire.
Selon la ActiveRecord documentationles attributs doivent automatiquement être typecasted en fonction des types de colonnes dans la base de données.
En fait, je peux ajouter un
before_save
de rappel à vos utilisateurs de modèle pour s'assurer que les valeurs sont dans le bon format c'est à dire:De sorte que vous pouvez les appeler
User.new(params[:user])
dans votre contrôleur, qui suit la devise "Gardez vos contrôleurs skinny"