STIを使用していくつかのモデルをセットアップしています
人<ActiveRecod....。
おとこ
女性
タイプフィールドを指定しましたが、新しいレコードの作成は正常に機能します。サブタイプ(男性または女性)はレコードとともに正常に保存され、タイプ列のは正しいタイプです。
ただし、レコードを更新/編集しようとすると、SQLUPDATEが呼び出されません。update_attributesはtrueを返します。ログはSELECTの呼び出しを示していますが、UPDATEは呼び出されていません。
フォームからタイプフィールドを削除した場合。保存する新しいレコードを作成します。ただし、タイプフィールドはnullです。しかし、その後、レコードを更新できます。
これを修正するためのアイデアや回避策はありますか?
コントローラコード
# GET /persons/new
# GET /persons/new.json
def new
@person = current_user.persons.build(params[:person])
@person.type = params[:type]
respond_to do |format|
format.html # new.html.erb
format.json { render json: @pass }
end
end
# GET /persons/1/edit
def edit
@person = Person(params[:id])
end
# POST /persons
# POST /persons.json
def create
@person = current_user.persons.build(params[:person])
respond_to do |format|
if @person.save
format.html { redirect_to @person, notice: 'Person was successfully created.' }
format.json { render json: @person, status: :created, location: @pperson }
else
format.html { render action: "new" }
format.json { render json: @person.errors, status: :unprocessable_entity }
end
end
end
# PUT /persons/1
# PUT /persons/1.json
def update
@person = Person.find(params[:id])
respond_to do |format|
if @person.update_attributes(params[:person])
format.html { redirect_to @person, notice: 'Person was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: "edit" }
format.json { render json: @person.errors, status: :unprocessable_entity }
end
end
end
私が新しいと呼ぶとき、それはサブクラスのためになるでしょう、すなわち
<%= link_to "New Woman", new_woman_path %>
私はこれのために準備されたルートを持っています、すなわち
resources :women, :controller => "persons", :type => "Woman"
resources :men, :controller => "persons", :type => "Man"
私が問題を抱えている場所である編集を呼び出すとき、すなわち
<%= link_to 'Edit', edit_person_path(@person) %>
コンソールでレコードを作成および編集する場合は注意してください。作成され、更新されます。