3

내가 강한 매개 변수강력한 매개 변수 키의 이름을 바꾸는 방법이 있습니까?

을 사용하지 않은 컨트롤러에 코드를 가지고 말할 수 있습니다
Model.create name: params[:name], alias_id: params[:foreign_id] 

그것은 나를 여기에 강력한 매개 변수를 사용할 수 있습니까? foreign_id이 PARAM

하지 않기 때문에

나는 alias_id이 모델이 아니기 때문에 내가

Model.create params.require(:name, :alias_id) 

할 수 없습니다

Model.create params.require(:name, :foreign_id) 

할 수 없습니다.

기본적으로 Strong Parameters를 사용할 때 매개 변수 키의 별칭을 지정할 수 있는지 알고 싶습니다.

답변

5

말할 수

# 
# Pass in a list of param keys to pull out of the params object 
# Alias param keys to another key by specifiying a mapping with a Hash 
# eg. filter_params :foo, :bar, {:choo => :zoo} 
# 
def filter_params(*param_list) 
    filtered_params = {} 
    param_list.each do |param| 
    if param.is_a? Hash 
     param.each {|key, value| filtered_params[value] = params[key]} 
    else 
     filtered_params[param] = params[param] 
    end 
    end 
    filtered_params 
end 

을 상속 (일반적으로 인해 일부 외부 API로) alias_attribute 방법을 사용합니다 ActiveRecord

따라서 {name: "bob", alias_id: 1234}으로 나와 궁금 하군요. 자민련은 내가 지금 내 모델은 항상 어떤 상황에서 foreign_id에 매핑으로 alias_id을 인식 내 ActiveRecord 모델

class MyModel < ActiveRecord::Base 
    alias_attribute :alias_id, :foreign_id 
end 

을에 다음과 같은 선언하고 내가 params.require(:name, :alias_id)에 밀어 수 있습니다 내 모델이 그것을 인식 {name: "bob", foreign_id: 1234}

을 갖고 싶어 컨트롤러의 속성을 반복하지 않고 필요에 따라 처리합니다.

다른 모델에서도이 작업을 수행하려는 경우 더 간단합니다.

+1

TIL. 통찰력을 가져 주셔서 감사합니다! –

1

다음 코드로 원하는 기능을 사용할 수 있습니다. 나는 강력한 매개 변수가 내가 필요한 것을 할 수 있다고 생각하지 않는다. 특히 require()가 여러 매개 변수를 취할 수는 없다. 내와 ApplicationController이 넣어

가 또는 모듈 그것이 내가 지금은이 방법으로 PARAMS 매핑하려면 보통 경우

Model.create filter_params(:name, {foreign_id: :alias_id}) 
관련 문제