0

Michael Hartl が彼のチュートリアル ( http://ruby.railstutorial.org/chapters/sign-in-sign-out ) で提案したように、サインイン/アウトの仕組みを実装しました。すべてが完璧に機能しました: プロファイル ページからのユーザーの作成、削除、更新。

次に、 (STI)Teacherのサブクラスとしてモデルを作成しました。User独自の検証はなく、親モデル (ユーザー) と同じ検証を使用する必要があります。ただし、type = "Teacher" のユーザーの属性を更新することはできなくなりました (他のユーザーは引き続き機能します)。更新フォームをコンパイルすると、次のように返されます。

`エラーメッセージには、teacher.attributes.password is missing validation と表示されます

教師はユーザーの同じ検証を継承する必要があります。

routes.rb で、教師モデルを作成した後、以下を追加しました。

 resources :teachers, :controller => 'users', :type => "Teacher"

これは、ユーザー コントローラーの update メソッドです。

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でユーザーモデルをサブクラス化するのは本当に悪いことですか?

Teacher モデルを次のように編集しました。

class Teacher < User

def self.model_name

User.model_name

end

end

于 2013-06-13T21:32:31.293 に答える