2014-01-26 118 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