2015-02-28 1 views
0

У меня есть следующий вид:сильных параметры с мультимодельной формой

<%= form_tag classification_code_rules_path do %> 
    <% @classification_code_rules.each do |rule| %> 
    <%= fields_for "classification_code_rule[]", rule do |pf| %> 
     <%= pf.text_field :name %> 
    <% end %> 
    <% end %> 
    <%= submit_tag %> 
<% end %> 

Он посылает то, что я хочу на сервер:

Parameters: { ... "classification_code_rule"=>[{"name"=>"dasdsaf"}, {"name"=>"sfsdgdfhgf"}, {"name"=>"hfghfgjhgjhg"}], "commit"=>"Save changes"} 

Поскольку classification_code_rule массив, я справиться с Params как следующим образом:

def classification_code_rule_params 
    params[:classification_code_rule].each do |rule_param| 
     rule_param.permit! 
    end 
    end 

Но я получаю следующее сообщение об ошибке:

When assigning attributes, you must pass a hash as an argument. 

Как я могу справиться с этой ситуацией, когда сильным параметром является массив?

+0

вы пытались 'params.require (: classification_code_rule) .permit' –

+0

@MohammadAbuShady, что дает мне «неопределенный метод' разрешение «! для # <Массив: 0x007fe6b8cfda68> " – Donato

ответ

0

Попробуйте что-то вроде этого

params.require(:classification_code_rule).map do |rule_param| 
    ActionController::Parameters.new(rule_param.to_hash).permit! 
end 
+0

Это работало без cancancan: params.require (: classic_code_rule) .map (&: allow!). Я попробую вашу технику и посмотрю, сработает ли она с cancancan. – Donato

+0

В обоих методах мне пришлось добавить исключение: load_and_authorize_resource, за исключением: [: create] из-за cancancan – Donato

+0

. Я попытаюсь выяснить, почему, потому что я использую только эти строки без каких-либо проблем с cancancan –

Смежные вопросы