2011-04-14 26 views
11

En Raylar öğreticiler şöyle params karma üzerinden bir modeli sınıfı doldurmak göstermektedir. Ancak, bazı özelliklerin ints veya tarih mi yoksa başka bir tür olması gerekiyorsa ne olur?oluşturma Raylar ActiveRecord modeli

Örneğin, en bu

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

gibi Kullanıcı sınıfı görünüyor diyelim: E-posta özelliği, bir dizi olmalıdır: employment_start_date nitelik tarih olmalı ve: gross_monthly_income ondalık olmalıdır. Bu özniteliklerin doğru türden olması için, bunun gibi bir şeye bakmak için denetleyici eylemimi değiştirmem gerekir mi? ,

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 

Yani sadece controller içerisinde User.new(params[:user]) çağırabilirsiniz:

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 
+0

Param [: kullanıcı] 'nın tüm dizelerine sahip olduğundan emin misiniz? Bence, AR ile kullandığınızda, parazitler karma doğru bir şekilde dönüştürülecektir. – rmk

+0

@rmk Evet, haklısınız. Temel olarak aynı şeyi söyleyerek bir cevap ekledim. Kabul edilen cevap olarak işaretlerdim, ama cevabımı kabul edilen cevap olarak işaretlemeden önce 2 gün beklemem gerekiyor. –

cevap

5

Aslında istediğiniz değerlerin doğru format yani olduğundan emin olmak için, kullanıcıların modelinde bir before_save geri arama eklersiniz "Denetleyicilerinizi sıska tutun" sloganını takip eden

+0

Bu işe yarayacak gibi görünüyor. Bunu yapmanın "raylar yolu" mu? Çok sık ortaya çıkacak bir durum gibi görünüyor, ama hayatım boyunca bunu gösteren herhangi bir öğretici/kılavuz bulamıyorum. –

+0

Daha fazla beğendiğim yeni bir sürüm eklendi. –

+0

Before_save sürümünü beğeniyorum. Yine de soru: [Buna göre] (http://stackoverflow.com/questions/2685226/convert-input-to-integer-before-save-in-rails/2685601#2685601), Rails dönüşüm yapmak için yeterince akıllıdır sizin için @user = User.new (params [: user]) gibi bir şey yürüttüğünde sizin için. Eğer durum buysa, sanırım bu gerekli değil mi? Doğru olsa emin değilim. –

İlgili konular