Создание модели ActiveRecord в Rails из хэша params - PullRequest
13 голосов
/ 14 апреля 2011

В большинстве уроков Rails показано, как заполнить класс модели с помощью хэша params следующим образом:

class UsersController < ApplicationController   
    def create
        @user = User.create(params[:user])

        # more logic for saving user / redirecting / etc.     
    end  
end

Это прекрасно работает, если все атрибуты в вашей модели должны быть строками.Тем не менее, что произойдет, если некоторые атрибуты должны быть целыми числами или датами или каким-то другим типом?

Например, предположим, что класс User выглядит следующим образом

class User < ActiveRecord::Base
    attr_accessible :email, :employment_start_date, :gross_monthly_income
end

: emailатрибут должен быть строкой, атрибут :loyment_start_date должен быть датой, а: gross_monthly_income должен быть десятичным.Чтобы эти атрибуты имели правильный тип, нужно ли мне вместо этого изменить действие контроллера, чтобы оно выглядело примерно так?

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

Ответы [ 2 ]

8 голосов
/ 14 апреля 2011

Согласно документации ActiveRecord , атрибуты должны автоматически настраиваться на основе типов столбцов в базе данных.

5 голосов
/ 14 апреля 2011

Я бы на самом деле добавил before_save обратный вызов в вашей модели пользователей, чтобы убедиться, что значения, которые вы хотите, имеют правильный формат, например:

class User < ActiveRecord::Base
  before_save :convert_values

  #...

  def convert_values
    gross_monthly_income = convert_to_decimal(gross_monthly_income)
    #and more conversions
  end

end

Так что вы можете просто вызвать User.new(params[:user]) в вашемконтроллер, который следует девизу "Держите свои контроллеры худыми"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...