2016-07-20 3 views
2

私はRails 4.2.4を使用しています。私はテーブル "my_objects"列 "address_id"は、私の "アドレス"テーブルに戻って外来キーです。だから私のmy_object.rbモデルでは、私は、参考のためRailsでは、フォームの送信時にStringからオブジェクトへの変換を強制するにはどうすればよいですか?

同時に、データベース内のSTATE_ID列のDN COUNTRY_ID列を持つ私のアドレスオブジェクトを(
belongs_to :address, :autosave => true, dependent: :destroy 
    def save_with_address 
    transaction do 
     if !self.address.nil? 
     address = Address.new(self.address) 
     address.my_object = self 
     address.save 
     self.address = address 
     end 

     # Save the object 
     save 
    end 
    end 

を対象とアドレスを保存するためのメソッドを作成する必要がありました)は、そう...

class Address < ActiveRecord::Base 
    belongs_to :state 
    belongs_to :country 
    has_one :my_object 
end 

しかし、私は以下のデータ

Parameters: {"utf8"=>"✓", "my_object"=>{"id"=>"", "name"=>"Dave20", "day"=>"07/06/2016", "distance"=>"10", "distance_unit_id"=>"5", "hour"=>"00", "minute"=>"04", "second"=>"05", "address"=>{"city"=>"baltimore", "state"=>"3555"}, "my_object_times_attributes"=>{"0"=>{"overall_rank"=>"", "age_group_rank"=>"", "gender_rank"=>"", "time_in_ms"=>"245000"}}}, "commit"=>"Save"} 

で、この行を私のフォームを提出し、「アドレス= Address.new(self.addressが)」で失敗しているように構成されていますthエラー: "ActiveRecord :: AssociationTypeMismatch(状態(#70161141072220)、文字列があります(#70161059455060)):"。明らかにRailsは私の状態ID文字列をオブジェクトに変換していません。どうすればそれをすることができますか?

答えて

0

あなたAddressモデルは、他の二つのモデルStatecountryに依存している、あなたはself.addressを渡すことによってAddressのための新しいオブジェクトを作成しようとしたときには、エラーが発生します。あなたが今、渡された値によってstatecountryのための新しいオブジェクトをcreattingことで、あなたのコードに変更を加えるとAddress.newにこのOBJECを渡すためにstringとしてstatecountryパスを持っているので、obvioulyそれは行かないだろう、この問題を解決するには

仕事をする

これは役に立ちます。

+0

パラメータ名を変更して自動的に変換が行われるようにする方法はありますか?それが不可能な場合は、「新しいオブジェクトを作成することによってコードを変更する」というコメントに関する例を挙げることができますか? – Dave

+0

あなたのフォームに 'state'と' country'フィールドをドロップダウンし、あなたの 'address'モデルの' state_id'と 'country_id'として値を渡す必要があります。 – hgsongra

関連する問題