2014-01-26 51 views
0

用戶有一個頁面,他可以編輯他的個人信息(姓名,出生日期,...)。Ruby on Rail,問題與數據保存

但是用戶可以從名稱字段中刪除該值,然後轉到與側邊欄的某個鏈接,並將信息保存爲空字符串('')。

問題:我該如何做這樣的檢查,如果至少有一個字段是空的,用戶不能去任何地方?或者如果它是空的,那麼用之前的數據填充它?

控制器:

def editMain 

    unless @user = User.find_by_id(session[:user_id]) 
     render_404 
     return 
    end 

    @user.update_attributes(params[:user]) 

    if params[:user][:first_name] == "" 
     @user.errors.add(:first_name, "ERROR!") 
    end 

    if params[:user][:last_name] == "" 
     @user.errors.add(:last_name, "ERROR!") 
    end 

    if params[:user][:birtday] == "" 
     @user.errors.add(:birthday, "ERROR!") 
    end 

    @countries = Country.all 
    @cities = City.all #where(country_id: @user.city.country.id) 

    if @user.errors.empty? 
     flash[:notice] = "Succssesful!" 
    else 
     render "editMain" 
    end 
end 

請幫幫我!

+2

爲什麼不是你'User'驗證自己的數據? –

回答

1

使用什麼框架給你。你不必重寫現有的東西。

此代碼=>

unless @user = User.find_by_id(session[:user_id]) 
    render_404 
    return 
end 

等於=>

@user = User.find(session[:user_id]) 

不要嘗試驗證在控制器對象。

此代碼=>

@user.update_attributes(params[:user]) 

if params[:user][:first_name] == "" 
    @user.errors.add(:first_name, "ERROR!") 
end 

if params[:user][:last_name] == "" 
    @user.errors.add(:last_name, "ERROR!") 
end 

if params[:user][:birtday] == "" 
    @user.errors.add(:birthday, "ERROR!") 
end 

等於這個=>

if @user.update_attributes(params[:user]) 
    flash[:notice] = "Succesful!" 
    redirect_to some_path 
else 
    render "editMain" 
end 

和使用了activerecord驗證。

型號/ user.rb

validates_presence_of :first_name, :last_name, :birthday 
0

坦率地說,這段代碼是相當混亂:當你無法找到一個頁面返回

1)404(與你不能找到一個資源(用戶)與某些ID)

2)404是通過導軌自動返回,如果頁面(路徑)未找到

3)型號應該做驗證(VS控制器)

4)渲染可以爲你自動在大多數情況下進行

我真的建議通過與Rails的入門tarted閱讀: http://guides.rubyonrails.org/getting_started.html