1

タイプがTeacher、Student、Outsiderである可能性のあるクラスPersonに対して、単一テーブル継承を実装する必要があります。

class Person < ActiveRecord::Base

end


class Teacher < Person

end

class Student < Person

end

class Outsider < Person

end

新しいユーザーを登録するときに、ルートとフォームにどのような変更を加える必要がありますか。新しいユーザーを登録するためのフォームのドロップダウンとして実装できるpeopleテーブルにcolumn(string)"type"があります。ユーザーが特定のタイプの個人として登録されるように、フォームで他に行う必要があることはありますか?ルートも変更する必要がありますか?

4

2 に答える 2

2

1つのフォームを使用してすべてのタイプの人物を作成するため、ルートを追加する必要がないように、1つのコントローラーも使用する必要があります。

type属性は、実際にはインスタンスに手動で割り当てる必要があるものではなく、作成するモデルのタイプを選択することによって自動的に設定する必要があります。

コントローラとビューでどのように表示されるかはわかりませんが、モデルのタイプを抽出して次のように作成できます。

class_type = params[:type].constantize
@person = class_type.new

一方、type属性がビューのform_forにネストされている場合、type属性はおそらくparams [:person] [:type]のようにコントローラーに送信されます。この場合、:personハッシュから削除する必要があります。新しいインスタンスの作成に使用される前。おそらくこのようなもの:

class_type = params[:person].delete(:type).constantize
@person = class_type.new(params[:person])
于 2010-12-13T11:25:53.873 に答える
1

フォームにタイプ選択のドロップダウンリストを追加することを除いて、これ以上行うことはありません。次のような通常の方法でユーザーを作成できます。

@user = Person.new params[:user]

ただし、type属性を一括割り当てることができなかったため、個別に割り当てる必要があります。

@user.type = sanitize_user_type params[:user][:type]

このメソッドsanitize_user_typeは、ユーザー入力値を検証するために使用されます。

新しいユーザーを作成するためのルートを変更する必要はありません。他のルートを変更する必要があるかどうかは、要件によって異なります。実際には、、、および相対コントローラーのルートを追加できるため、TeacherRESTfulURLを作成できます。StudentOutsider

于 2010-12-13T11:27:07.840 に答える