用户有一个页面,他可以编辑他的个人信息(姓名,出生日期......)。
但是用户可以从 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
拜托,帮助我!
答案 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