0

正如 Michael Hartl 在他的教程 ( http://ruby.railstutorial.org/chapters/sign-in-sign-out ) 中建议的那样,我实现了一个登录/注销机制。一切都很完美:从个人资料页面创建、删除、更新用户。

然后我创建了一个Teacher模型作为User(STI)的子类。它没有自己的验证,应该使用与父模型(用户)相同的验证。但是更新 type = "Teacher" 用户的属性是不可能的(对于其他用户它继续工作)。当我编译更新表单时,它返回:

`错误消息说我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]) 它可以工作,但显然只适用于老师。

我认为解决方案很简单,但我是新手。任何帮助,将不胜感激!

4

1 回答 1

0

由于d11wtq在这里提出的解决方案,我解决了我的问题:

在 Rails 中子类化用户模型真的很糟糕吗?

我像这样编辑了教师模型:

class Teacher < User

def self.model_name

User.model_name

end

end

于 2013-06-13T21:32:31.293 回答