簡體   English   中英

Rails-5:如何將數組(has_many關聯)傳遞給控制器​​操作

[英]Rails - 5: How do I pass an array (has_many association) to the controller action

我有一個模型event和另一個模型event_rule

class Event < ApplicationRecord
    has_many :event_rules
end

class EventRule < ApplicationRecord
    belongs_to :event
end

我已經編寫了一個用於保存事件的api event#create 這是POST請求的正文:

{
    "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哈希:

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包含'event_rules'。 怎么辦

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

替代Rails-way解決方案:

如果您可以控制要發送的參數,則將請求重新格式化為以下格式(請注意將event_rules更改為event_rules_attributes -Rails Standard) (在此處有更多信息)

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM