Доступ к параметрам с подстановочными знаками в Rails - PullRequest
0 голосов
/ 10 июля 2019

На данный момент у меня есть form_tag, который содержит входы и помещает эти входы в параметры.Я хочу иметь возможность зацикливать их в действии контроллера.

Я попытался получить все params, исключая все обычные params (действие, контроллер, название модели и т. Д.), А затем с помощьюподстановочные знаки, такие как params[:prop*].

Вот вводные данные обидной формы:

%input{:name => "userEmails", :id =>"userEmails", :type => "hidden", :value => ""}
  -@all_properties.each do |prop|
    %input{:name => "prop"+prop.name+"checkbox", :type => "checkbox", :id => "prop"+prop.name+"checkbox"}
    #{prop.name}
    %input{:name => "prop"+prop.name, :type => "text", :id => "prop"+prop.name}

Они отображаются в таких параметрах, как {"propProperty1checkbox"=>"on", "propProperty1" => "testing", "propAnotherPropertycheckbox" => "on", "propAnotherProperty" => "another test value"} и т. д.

Я не уверен, какчтобы получить к ним доступ, так как имена свойств могут изменяться, и поэтому к ним нужно обращаться абстрактно.

Ответы [ 2 ]

1 голос
/ 10 июля 2019

Вы можете попробовать что-то вроде:

input(name: "props[#{pro_name}][checkbox]"...)
input(name: "props[#{pro_name}][text]"...)

Затем в вашем контроллере:

def method
  props = params[:props]
  props.each do |property_name, values|
    chk = values[:checkbox]
    text = values[:text]
  end
end
1 голос
/ 10 июля 2019

Вы можете использовать #select для params хэша, чтобы отфильтровать только те параметры, которые вам интересны:

params = {"user_id"=>1, 
 "propProperty1checkbox"=>"on",                                                                                   
 "propProperty1"=>"testing",                                                                                      
 "propAnotherPropertycheckbox"=>"on",                                                                             
 "propAnotherProperty"=>"another test value"
}
params.to_h.select{|key, value| key =~ /^prop/}
#=> {"propProperty1checkbox"=>"on",
#"propProperty1"=>"testing",
#"propAnotherPropertycheckbox"=>"on",
#"propAnotherProperty"=>"another test value"}

EDIT

Пример из комментария:

[13] pry(main)> {"utf8"=>"✓", "_method"=>"put", "authenticity_token"=>"xxxxx", "userEmails"=>"teste@test.com,test2@test.com,test4@test.com,fasd@gmail.com", "propProperty1checkbox"=>"on", "propProperty1"=>"3", "propAnotherPropertycheckbox"=>"on", "propAnotherProperty"=>"4", "commit"=>"Submit", "Application"=>"8", "Company"=>"1" }.to_h.select{|k, v| k =~ /^prop/}
=> {"propProperty1checkbox"=>"on",
 "propProperty1"=>"3",
 "propAnotherPropertycheckbox"=>"on",
 "propAnotherProperty"=>"4"}
...