2017-04-25 3 views
0

에 내가 배열 (has_many 협회)를 통과 할 방법은 내가 모델 event 내가 이벤트를 저장하기위한 API event#create을 쓴 또 다른 모델 event_rule레일 - 5 : 컨트롤러 액션

class Event < ApplicationRecord 
    has_many :event_rules 
end 

class EventRule < ApplicationRecord 
    belongs_to :event 
end 

있습니다. 다음은 POST 요청의 본문입니다 :

Parameters: {"name"=>"asd", "code"=>"ad", "is_active"=>true, "description"=>"asd", "notes"=>"", "goal_amount"=>0, "export_id"=>"", "default_currency"=>1, "event_start_date"=>"2017-04-25T18:30:00.000Z", "event_end_date"=>"2017-04-27T18:30:00.000Z", "event_rules"=>[{"extra_information"=>"{}", "lookup_key_value_pair_id"=>40}], "client_id"=>"0", "event"=>{"name"=>"asd", "code"=>"ad", "description"=>"asd", "is_active"=>true, "goal_amount"=>0, "export_id"=>"", "event_start_date"=>"2017-04-25T18:30:00.000Z", "event_end_date"=>"2017-04-27T18:30:00.000Z", "default_currency"=>1, "notes"=>""}} 

내가 'event_rules'는 event 안쪽에 포함 할 :

{ 
    "name": "asd", 
    "code": "ad", 
    "isActive": true, 
    "description": "asd", 
    "notes": "", 
    "goalAmount": 0, 
    "exportId": "", 
    "defaultCurrency": 1, 
    "eventStartDate": "2017-04-25T18:30:00.000Z", 
    "eventEndDate": "2017-04-27T18:30:00.000Z", 
    "eventRules": [ 
     { 
      "extraInformation": "{}", 
      "lookupKeyValuePairId": 40 
     } 
    ] 
} 

여기 params 해시입니다. 어떻게 할 수 있니?

+0

'양식'안에 코드를 추가 할 수 있습니까? –

+0

API입니다. 그래서, 아무런 견해가 없습니다. – mridula

+0

당신의 생성 방법을 공유하십시오 – Sajin

답변

0
def create 
    # initialize Event object with `event_params` 
    event = Event.new(event_params) 

    # initialize EventRule object per each `event_rule_params`, and associate the EventRule as part of `event.event_rules` 
    event_rules_params.each do |event_rule_params| 
    event.event_rules << EventRule.new(event_rule_params) 
    end 

    if event.save 
    # SUCCESS 
    else 
    # FAILURE 
    end 
end 

private 

def event_params 
    params.require(:event).permit(:name, :code, :is_active, :description, :notes, :goal_amount, :export_id, :default_currency, :event_start_date, :event_end_date, :notes) 
end 

def event_rules_params 
    params.require(:event).fetch(:event_rules, []).permit(:extra_information, :lookup_key_value_pair_id) 
end 

대체 레일 웨이 해결 방법 : 전송받을 매개 변수를 제어 할 수있는 경우

는, 다음과 같은 무언가로 요청을 포맷 (event_rules_attributesevent_rules 변경을주의 깊게 살펴 - 레일 표준) (More Info Here)

Parameters: { 
    "event"=>{ 
    "name"=>"asd", 
    "code"=>"ad", 
    "description"=>"asd", 
    "is_active"=>true, 
    "goal_amount"=>0, 
    "export_id"=>"", 
    "event_start_date"=>"2017-04-25T18:30:00.000Z", 
    "event_end_date"=>"2017-04-27T18:30:00.000Z", 
    "default_currency"=>1, 
    "notes"=>"", 
    "event_rules_attributes"=>[ 
     { 
     "extra_information"=>"{}", 
     "lookup_key_value_pair_id"=>40 
     } 
    ] 
    } 
} 


# controllers/events_controller.rb 
def create 
    event = Event.new(event_params) 

    if event.save 
    # SUCCESS 
    else 
    # FAILURE 
    end 
end 

private 

def event_params 
    params.require(:event).permit(:name, :code, :is_active, :description, :notes, :goal_amount, :export_id, :default_currency, :event_start_date, :event_end_date, :notes, event_rules_attributes: [:extra_information, :lookup_key_value_pair_id]) 
end 

# models/event.rb 
accepts_nested_attributes_for :event_rules 
+0

고마워, 나는 이것을 시도 할 것이다. – mridula

관련 문제