Ruby on Rail,数据保存问题

时间:2014-01-26 19:14:04

标签: ruby-on-rails ruby ruby-on-rails-3.2

用户有一个页面,他可以编辑他的个人信息(姓名,出生日期......)。

但是用户可以从 Name 字段中删除该值,然后转到侧边栏的某个链接,信息将保存为空字符串('')。

问题:我如何进行此类检查,如果至少有一个字段为空,则用户无法前往任何地方?或者如果它是空的,那么用之前的数据填充它?

控制器:

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 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

坦率地说,这段代码非常混乱:

1)当你找不到一个页面时返回404(vs你找不到一个有id的资源(用户))

2)如果找不到页面(路线),则由rails自动返回404

3)模型应该进行验证(vs控制器)

4)在大多数情况下,可以自动渲染

我真的建议阅读让Rart Tarted: http://guides.rubyonrails.org/getting_started.html