0

私は初心者であり、この問題を解決する方法について助けていただければ幸いです。DataMapperのドキュメントに従おうとしましたが、オブジェクトとそれに対応するリンクを破棄する方法について、Google経由で解決策を見つけられませんでした。キーコードセグメントは次のとおりです。

モデル

class Entity

DataMapper::Resourceを含める

プロパティ:entity_id、シリアルプロパティ:full_legal_name、文字列プロパティ:tax_id、文字列プロパティ:phone_number、文字列プロパティ:fax_number、文字列プロパティ:cell_number、文字列プロパティ:email、文字列、:unique => true、:format =>:email_addressプロパティ: alt_email、Stringプロパティ:is_active、Booleanプロパティ:created_at、DateTimeプロパティ:created_by、Stringプロパティ:updated_at、DateTimeプロパティ:updated_by、Stringプロパティ:auto_pay、Booleanプロパティ:use_ach、Booleanプロパティ:prefix、Stringプロパティ:first_name、Stringプロパティ: middle_name、Stringプロパティ:last_name、Stringプロパティ:suffix、文字列プロパティ:referral_code、文字列プロパティ:login_name、文字列、:unique => trueプロパティ:hashed_pa​​ssword、文字列、:length => 200プロパティ:salt、文字列プロパティ:permission_level、整数プロパティ:title、文字列プロパティ:greeting、文字列プロパティ: priority_name、Stringプロパティ:preferred_language、Stringプロパティ:security_question、Stringプロパティ:security_answer、Stringプロパティ:signature_font、Stringプロパティ:auth1_checkbox、Booleanプロパティ:auth2_checkbox、Booleanプロパティ:auth3_checkbox、Booleanプロパティ:auth4_checkbox、Booleanプロパティ:auth5_checkbox、ブール型プロパティ:auth6_checkbox、ブール型プロパティ:digital_signature、文字列プロパティ:date_signed、DateTimeプロパティ:signatory_ip、文字列プロパティ:signatory_title、文字列

n、:addresses、:through =>リソースにはn、:achesにはn、:creditcardsがあります

終わり

クラスPerson<Entity

プロパティ:birthdate、文字列プロパティ:drivers_license_number、文字列プロパティ:state_issuing_drivers_license、文字列

終わり

クラス会社<エンティティ

プロパティ:dba_name、文字列プロパティ:legal_structure、文字列プロパティ:url、文字列、:format =>:url

終わり

クラスアドレス

DataMapper::Resourceを含める

プロパティ:address_id、シリアルプロパティ:esid、String、:unique => trueプロパティ:description、Stringプロパティ:address_line1、Stringプロパティ:address_line2、Stringプロパティ:city、Stringプロパティ:state、Stringプロパティ:zipcode、Stringプロパティ:country、文字列プロパティ:meter_number、文字列プロパティ:meter_type、文字列プロパティ:meter_status、文字列プロパティ:meter_status_date、DateTimeプロパティ:updated_by、文字列プロパティ:switch_indicator、文字列プロパティ:switch_type、文字列プロパティ:selected_switch_date、日付プロパティ:under_contract、ブールプロパティ:contract_end_date、日にち

n、:entities、:through=>リソースがあります

終わり

オブジェクトの作成と永続性

     if session[:base_route].to_s == "residential"
   #residential processing
   @entity_id = session[:this_person].inspect
   @person = Person.get(@entity_id.to_i)
   @address = Address.new()
   @address.esid = params[:post][:esid]
   @address.description = params[:post][:service_location_description]
   @address.address_line1 = params[:post][:service_address_line1]
   @address.address_line2 = params[:post][:service_address_line2]
   @address.city = params[:post][:service_city_name]
   @address.state = params[:post][:service_state_name]
   @address.zipcode = params[:post][:service_zip_code]
   @address.switch_indicator = params[:post][:switch_indicator]
   @address.switch_type = params[:post][:switch_type]
   params[:post][:under_contract_checkbox]  == "on" ? @under_contract = true : @under_contract = false 
   @address.under_contract = @under_contract

   @person.addresses << @address

   if @person.save

オブジェクトとリンクの破棄を試みました(リンクは破棄されますが、アドレスの破棄は機能しません)

    @entity_id = session[:this_person].inspect
    address = Address.get(params[:post][:submit].to_i)
    address.destroy
    entity = Entity.get(@entity_id)
    link = entity.address_entities.get(@entity_id, params[:post][:submit])
    link.destroy      

ヒントや提案は大歓迎です。

4

1 に答える 1

0

回答オブジェクトとエンティティオブジェクトの間にリンクがあったため、回答オブジェクトの削除に失敗しました。順序を逆にして、最初にリンクを削除し、次にオブジェクトを削除することにより、オブジェクトが破棄されます。

@entity_id = session[:this_person].inspect
entity = Entity.get(@entity_id)
link = entity.address_entities.get(@entity_id, params[:post][:submit])
link.destroy
address = Address.get(params[:post][:submit].to_i)
address.destroy
于 2012-07-05T13:58:13.250 に答える