3

注:私はこれに類似した投稿を読んでいます。しかし、ソリューションのどれも私のために働く。
私は1対多の関係を持つ2つのオブジェクトアピールとアピールを持っています。アピールオブジェクトを保存すると、すべてのフィールドが保存され、アピール者IDも(FKとして)保存されます。しかしAppealerテーブルでは、idを除いて新しいレコードはデータなしで保存されます。Rails 4 - belongs_toネストされたオブジェクトフィールドは保存されません

MODEL

class Appeal < ActiveRecord::Base 
    belongs_to :appealer, :autosave => true 
    accepts_nested_attributes_for :appealer 
end 

class Appealer < ActiveRecord::Base 
    has_many :appeals, :autosave => true 
end 

AppealsController

class AppealsController < ApplicationController 
    def index 
     respond_with Appeal.all 
    end 

    def create 
     appealer = Appealer.create(appealer_params) 
     @appeal = Appeal.create(appeal_params) 
     @appeal.appealer = appealer 


     if @appeal.save 
      respond_with @appeal 
     else 
      respond_with {:error} 
     end 
    end 

    def show 
     respond_with Appeal.find(params[:id]) 
    end 

    private 
    def appeal_params 
     params.require(:appeal).permit(:subject, :status, :submit_means, :card_type, :submit_date, :relationship, :report_date, :explanation, :email_approval) 
    end 
    def appealer_params 
     params.require(:appeal).permit(appealer: [:appealer_id, :first_name, :last_name]) 
    end 
end 

EDITここ は、私が

{ 
     "id": 21, 
     "subject": "axxxscaaaa", 
     "status": "happy", 
     "submit_means": "DOAR", 
     "card_type": "sdsd", 
     "submit_date": 1466629200000, 
     "relationship": null, 
     "report_date": 1466542800000, 
     "explanation": "sdsd", 
     "email_approval": null, 
     "appealer": {"first_name":"aaaaaaa", "last_name":"fffff"}, 
     "selfRequest": false, 
     "created_at": 1465851600000, 
     "updated_at": 1465333200000 
    } 
を使用してJSONであります

私はappealerのフィールドが

+0

http://railscast.com/episodes/196-nested-model-form-part-1?vi ew = asciicast – chaitanya

+0

はい私はすでにこの例を通過しましたが、うまくいきませんでした。 – nufar

+2

'appealer_params'に' appealer_attributes'を使用できますか?この 'params.require(:appeal).permit(appealer_attributes:[:appealer_id、:first_name、:last_name])のように。そして、あなたはすでに「フィールドアワー」を「アピール者」に使っていると思いますか? –

答えて

2
  • をこの

    def appeal_params 
        params.require(:appeal).permit(:subject, :status, :submit_means, :card_type, :submit_date, :relationship, :report_date, :explanation, :email_approval, appealers_attributes: [:id, :first_name, :last_name]) 
    end 
    

    を試してみて、削除保存されていない理由を理解していませんrails fields_forまたはビュー形式のもの。したがって、あなたのモデルでこれ(accepts_nested_attributes_for:appealer)行は必要ありません。モデルは次のようにする必要があります:

    class Appeal < ActiveRecord::Base 
        belongs_to :appealer, :autosave => true 
        end 
    
  • これと
  • 次の事、あなたの現在のロジックでは、あなたのappealer_paramsため、appealer_params変更方法:

    def appealer_params 
        params.require(:appealer).permit(:first_name, :last_name) 
    end 
    
  • があなたのシナリオのためのアクション・ロジックを作成します。

    def create 
        @appeal = Appeal.new(appeal_params) 
        if appealer_params.present? 
        appealer = Appealer.create(appealer_params)  
        @appeal.appealer = appealer 
        end 
    
        if @appeal.save 
        respond_with @appeal 
        else 
        respond_with {:error} 
        end 
    end 
    
+0

と残りのコードはそのままですか?私がそうすると、「paramが見つからないか、値が空です:appealer」というエラーが表示されます。 – nufar

+0

現在のシナリオでは、コードをそのまま残すことができます。しかし、アピール人のデータのために空白の値を受け取ることができ、アピール者のデータを受け取ることができない場合。その後、それを処理する必要があります。正確なシナリオを与えてから、私は答えを更新します。 – Devd

+0

アピール担当者はヌル(データはまったくありません)でもかまいませんが、アピール担当者がいる場合は、3つのフィールドすべてが値でなければなりません。 – nufar

0

はあなたのJSONオブジェクトの示すとおり、あなたが使用していない。このラインappealer = Appealer.create(appealer_params)

+0

ありがとうが、それは私のために働いていない。 – nufar

+0

私は持っています。これはfield_forの問題です。 – Anna88

関連する問題