子类(STI)的update_attributes上的验证错误

时间:2013-01-24 01:00:32

标签: ruby-on-rails validation model subclass sti

我实施了一个登录/退出机制,正如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])它有效,但显然只适用于老师。

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

1 个答案:

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

相关问题