2014-12-10 2 views
0

레일 4 및 Active Admin을 사용 중입니다. createupdate 메서드에 허용되는 다른 매개 변수 집합이 필요하므로 instructions from the Active Admin documentation을 수정하여이 문제에 접근하고 있습니다. 여기에 내가 뭘하려고 오전입니다 :Active Admin의 강력한 매개 변수 : Symbol을 정수로 암시 적으로 변환하지 않음

내 모델에 다음 매개 변수 설정을 할 필요가 생성 :

:name, :region, :contact_details, :province_id, :status_id, :start_date 

그러나 갱신에 :region을 변경해서는 안됩니다. 따라서, 기본 Active 관리자의 업데이트 방법을 무시하지 않고, 내가 permit_params을 수정하고하는 것은 다음과 같이

permit_params do 
    params = [:name, :contact_details, :province_id, :status_id, :start_date] 
    params.push(:region) unless params[:action] == "update" 
    params 
    end 

그 결과 필연적으로 다음과 같은 오류입니다 :

내가 믿는 발생
TypeError: no implicit conversion of Symbol into Integer 

, permit_params가 생성됩니다 방법 permitted_params.

내가 뭘 잘못하고 있니? 해결 방안은 무엇인가? 다음과 같이 코드를 리팩토링하면 어떻게

+0

'permit_params' 메서드를 사용하는 코드 표시 – Nermin

+0

'permit_params'는 기본 컨트롤러의 무대 뒤에서 ActiveAdmin이 사용합니다 ([here] (https://github.com/activeadmin/activeadmin/blob/master) 참조). /docs/2-resource-customization.md)). 필자는'permit_params'를 사용하는 코드를 작성하지 않았습니다. – azangru

답변

1

안드레이 Deineko

permit_params do 
    params = [:region, :name, :contact_details, :province_id, :status_id, :start_date] 
    params.delete(:region) if action_name == 'update' 
    params 
    end 
의 짧은 버전을 PARAMS

콘솔 출력 :

2.1.5 :021 > params = [:region, :name, :contact_details, :province_id, :status_id, :start_date] 
=> [:region, :name, :contact_details, :province_id, :status_id, :start_date] 
2.1.5 :022 > params.delete(:region) 
=> :region 
2.1.5 :023 > params 
=> [:name, :contact_details, :province_id, :status_id, :start_date] 
+0

참으로 짧고 달콤합니다. 지금 나는 또 다른 문제가있다 : 당신의 코드가 작동하고 update 메소드 동안 허가되지 않은 매개 변수들 사이에': region'이 나열되어 있지만, 그 값은 여전히 ​​업데이트된다. 그러나 이것은 아마 자신의 질문을받을 만하다. – azangru

+0

params [: action] == "update"'인 경우,이 시점에서'action_name'을 사용할 수 없지만 params는 어쨌든 전송되고 params [: action]가 작동 할 수도 있습니다.이'params.delete (: region) . – rmagnum2002

+0

'action_name'을 사용할 수 있습니다. 힌트를 보내 주셔서 감사합니다. 그것은 내가 바보가되었다는 것이 었습니다. 하나의 매개 변수를 걸러 내고 또 다른 매개 변수를 테스트했습니다 :-) – azangru

1

:

permit_params do 
    regular_params = [:name, :contact_details, :province_id, :status_id, :start_date] 
    update_params = regular_params + [:region] 
    permitted = params[:action] == "update" ? update_params : regular_params 
    permitted 
    end 
+0

'# push'는 원본을 수정할 수 없기 때문에 사용할 수 없습니다. 'regular_params + [: region]'과 같은 것이 작동 할 것입니다. –

+0

@ JiříPospíšil 실제로 당신 말이 맞습니다! –

+0

네, 고맙습니다. 나는 결국 rmagnum2002의 변형과 함께 갔고, 이제 update 메소드에 올바른 매개 변수 집합을 전달했지만 삭제 된 매개 변수 (: region)는 여전히 업데이트된다는 사실에 당황한 것입니다. – azangru

0

이 방법을 시도, 어쩌면 당신의 문제가 허가를하지 않습니다는

permit_params :name, :contact_details, :province_id, :status_id, :start_date 
    # it does not work as you want but maybe can help you find bug 
+0

그리고 어떨까요 : 지역? 그는 그가 원하지 않는다고 말했습니다. 지역 갱신이 허용되어야합니다. 귀하의 경우에는 생성 및 업데이트 작업 모두에서 허용됩니다. – rmagnum2002

관련 문제