我实施了一个登录/退出机制,正如Michael Hartl在他的教程(http://ruby.railstutorial.org/chapters/sign-in-sign-out)中所建议的那样。一切都很完美:从个人资料页面创建,删除,更新用户。
然后我创建了一个Teacher
模型作为User
(STI)的子类。它没有自己的验证,应该使用与父模型(用户)相同的验证。
但是更新type =“Teacher”的用户的属性是不可能的(对于其他用户,它继续工作)。当我编译更新表单时,它返回:
`错误消息说我老师.attributes.password缺少验证
虽然教师应该继承相同的用户验证。
在routes.rb中,在创建教师模型后,我添加了:
resources :teachers, :controller => 'users', :type => "Teacher"
这是用户控制器中的更新方法:
def update
@user = User.find(params[:id])
if @user.update_attributes(params[:user])
redirect_to @user ...
如果我将@ user.update_attributes(params [:user])更改为@ user.update_attributes(params [:teacher])它有效,但显然只适用于老师。
我认为解决方案非常简单,但我是新手。 任何帮助将不胜感激!
答案 0 :(得分:0)
由于d11wtq提出的解决方案,我解决了我的问题:
Is subclassing a User model really bad to do in Rails?
我编辑了这样的教师模型:
class Teacher < User
def self.model_name
User.model_name
end
end