Je convertitons mon application Rails (-v3.2.13) aux rails 4.J'ai utilise les actions d'écrasement des ressources héritées de ressources (Créer! et mettre à jour!). Je permets tout le hasch des paramètres, mais cela ne crée pas / met à jour le Attributs imbriqués.Je besoin de permettre à l'ensemble du hachage des paramètres. Quand j'ai essayé, je reçois l'erreur suivante.Help me pour résoudre ceci.
params p>
Completed 500 Internal Server Error in 3686ms ArgumentError (wrong number of arguments (6 for 1..2)): app/controllers/foo_controller.rb:160:in `update' protected_attributes (1.0.3) lib/active_record/mass_assignment_security/persistence.rb:60:in `update_attributes' inherited_resources (1.3.1) lib/inherited_resources/base_helpers.rb:78:in `update_resource' inherited_resources (1.3.1) lib/inherited_resources/actions.rb:45:in `update' app/controllers/partner_modules_controller.rb:160:in `update' actionpack (4.0.0) lib/action_controller/metal/implicit_render.rb:4:in `send_action' actionpack (4.0.0) lib/abstract_controller/base.rb:189:in `process_action' actionpack (4.0.0) lib/action_controller/metal/rendering.rb:10:in `process_action' actionpack (4.0.0) lib/abstract_controller/callbacks.rb:18:in `block in process_action' activesupport (4.0.0) lib/active_support/callbacks.rb:445:in `block (2 levels) in _run__2668227825050344147__process_action__callbacks' activesupport (4.0.0) lib/active_support/callbacks.rb:212:in `block in _conditional_callback_around_4134' rails-observers (0.1.2) lib/rails/observers/action_controller/caching/sweeping.rb:73:in `around' activesupport (4.0.0) lib/active_support/callbacks.rb:283:in `_callback_around_4133' activesupport (4.0.0) lib/active_support/callbacks.rb:211:in `_conditional_callback_around_4134' activesupport (4.0.0) lib/active_support/callbacks.rb:444:in `block in _run__2668227825050344147__process_action__callbacks' activesupport (4.0.0) lib/active_support/callbacks.rb:215:in `_conditional_callback_around_4135' activesupport (4.0.0) lib/active_support/callbacks.rb:443:in `_run__2668227825050344147__process_action__callbacks' activesupport (4.0.0) lib/active_support/callbacks.rb:80:in `run_callbacks' actionpack (4.0.0) lib/abstract_controller/callbacks.rb:17:in `process_action' actionpack (4.0.0) lib/action_controller/metal/rescue.rb:29:in `process_action' actionpack (4.0.0) lib/action_controller/metal/instrumentation.rb:31:in `block in process_action' activesupport (4.0.0) lib/active_support/notifications.rb:159:in `block in instrument' activesupport (4.0.0) lib/active_support/notifications/instrumenter.rb:20:in `instrument' activesupport (4.0.0) lib/active_support/notifications.rb:159:in `instrument' actionpack (4.0.0) lib/action_controller/metal/instrumentation.rb:30:in `process_action' actionpack (4.0.0) lib/action_controller/metal/params_wrapper.rb:245:in `process_action' activerecord (4.0.0) lib/active_record/railties/controller_runtime.rb:18:in `process_action' actionpack (4.0.0) lib/abstract_controller/base.rb:136:in `process' actionpack (4.0.0) lib/abstract_controller/rendering.rb:44:in `process' actionpack (4.0.0) lib/action_controller/metal.rb:195:in `dispatch' actionpack (4.0.0) lib/action_controller/metal/rack_delegation.rb:13:in `dispatch' actionpack (4.0.0) lib/action_controller/metal.rb:231:in `block in action' actionpack (4.0.0) lib/action_dispatch/routing/route_set.rb:80:in `call' actionpack (4.0.0) lib/action_dispatch/routing/route_set.rb:80:in `dispatch' actionpack (4.0.0) lib/action_dispatch/routing/route_set.rb:48:in `call' actionpack (4.0.0) lib/action_dispatch/journey/router.rb:71:in `block in call' actionpack (4.0.0) lib/action_dispatch/journey/router.rb:59:in `each' actionpack (4.0.0) lib/action_dispatch/journey/router.rb:59:in `call' actionpack (4.0.0) lib/action_dispatch/routing/route_set.rb:655:in `call' newrelic_rpm (3.6.6.147) lib/new_relic/rack/error_collector.rb:43:in `call' bullet (4.6.0) lib/bullet/rack.rb:13:in `call' newrelic_rpm (3.6.6.147) lib/new_relic/rack/error_collector.rb:43:in `call' newrelic_rpm (3.6.6.147) lib/new_relic/rack/agent_hooks.rb:22:in `call' newrelic_rpm (3.6.6.147) lib/new_relic/rack/browser_monitoring.rb:16:in `call' warden (1.2.3) lib/warden/manager.rb:35:in `block in call' warden (1.2.3) lib/warden/manager.rb:34:in `catch' warden (1.2.3) lib/warden/manager.rb:34:in `call' rack (1.5.2) lib/rack/etag.rb:23:in `call' rack (1.5.2) lib/rack/conditionalget.rb:35:in `call' rack (1.5.2) lib/rack/head.rb:11:in `call' remotipart (1.2.1) lib/remotipart/middleware.rb:27:in `call' actionpack (4.0.0) lib/action_dispatch/middleware/params_parser.rb:27:in `call' actionpack (4.0.0) lib/action_dispatch/middleware/flash.rb:241:in `call' rack (1.5.2) lib/rack/session/abstract/id.rb:225:in `context' rack (1.5.2) lib/rack/session/abstract/id.rb:220:in `call' actionpack (4.0.0) lib/action_dispatch/middleware/cookies.rb:486:in `call' activerecord (4.0.0) lib/active_record/query_cache.rb:36:in `call' activerecord (4.0.0) lib/active_record/connection_adapters/abstract/connection_pool.rb:626:in `call' actionpack (4.0.0) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call' activesupport (4.0.0) lib/active_support/callbacks.rb:373:in `_run__994999873434308059__call__callbacks' activesupport (4.0.0) lib/active_support/callbacks.rb:80:in `run_callbacks' actionpack (4.0.0) lib/action_dispatch/middleware/callbacks.rb:27:in `call' actionpack (4.0.0) lib/action_dispatch/middleware/reloader.rb:64:in `call' actionpack (4.0.0) lib/action_dispatch/middleware/remote_ip.rb:76:in `call' actionpack (4.0.0) lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call' actionpack (4.0.0) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call' railties (4.0.0) lib/rails/rack/logger.rb:38:in `call_app' railties (4.0.0) lib/rails/rack/logger.rb:21:in `block in call' activesupport (4.0.0) lib/active_support/tagged_logging.rb:67:in `block in tagged' activesupport (4.0.0) lib/active_support/tagged_logging.rb:25:in `tagged' activesupport (4.0.0) lib/active_support/tagged_logging.rb:67:in `tagged' railties (4.0.0) lib/rails/rack/logger.rb:21:in `call' quiet_assets (1.0.2) lib/quiet_assets.rb:18:in `call_with_quiet_assets' actionpack (4.0.0) lib/action_dispatch/middleware/request_id.rb:21:in `call' rack (1.5.2) lib/rack/methodoverride.rb:21:in `call' rack (1.5.2) lib/rack/runtime.rb:17:in `call' rack (1.5.2) lib/rack/lock.rb:17:in `call' actionpack (4.0.0) lib/action_dispatch/middleware/static.rb:64:in `call' railties (4.0.0) lib/rails/engine.rb:511:in `call' railties (4.0.0) lib/rails/application.rb:97:in `call' rack (1.5.2) lib/rack/content_length.rb:14:in `call' thin (1.5.1) lib/thin/connection.rb:81:in `block in pre_process' thin (1.5.1) lib/thin/connection.rb:79:in `catch' thin (1.5.1) lib/thin/connection.rb:79:in `pre_process' thin (1.5.1) lib/thin/connection.rb:54:in `process' thin (1.5.1) lib/thin/connection.rb:39:in `receive_data' eventmachine (1.0.3) lib/eventmachine.rb:187:in `run_machine' eventmachine (1.0.3) lib/eventmachine.rb:187:in `run' thin (1.5.1) lib/thin/backends/base.rb:63:in `start' thin (1.5.1) lib/thin/server.rb:159:in `start' rack (1.5.2) lib/rack/handler/thin.rb:16:in `run' rack (1.5.2) lib/rack/server.rb:264:in `start' railties (4.0.0) lib/rails/commands/server.rb:84:in `start' railties (4.0.0) lib/rails/commands.rb:78:in `block in <top (required)>' railties (4.0.0) lib/rails/commands.rb:73:in `tap' railties (4.0.0) lib/rails/commands.rb:73:in `<top (required)>' script/rails:6:in `require' script/rails:6:in `<main>'
7 Réponses :
Comme indiqué dans le paramètres solides README , vous pouvez utiliser le Permis! Code> Méthode de WHITELIST L'ensemble du hachage de paramètres suivants:
params.require(:foo).permit!
Ça ne marche pas.still je me trompe d'erreur de nombre d'arguments.
Pouvez-vous poster la trace complète dans votre question lorsque cette erreur se produit.
@Mano, est-ce que c'est? Il devrait y avoir plus que je ne vois pas l'erreur dont vous parlez.
@Mano, s'il vous plaît essayez appeler update! Code> avec
Resource_params code> paramètre, c'est-à-dire une action de mise à jour do
mise à jour! (Ressources_params) FAIT | succès, échec | code> code>
Oh mon Dieu merci! J'ai écrit un permis sans fin (.....) appelle des modèles totalement non critiques pour trop longtemps. Je ne savais pas que c'était si facile!
Je crois que votre ressource_params code> doit être appelé
autorisé_params code>. Plus de détails sur la façon de gérer les paramètres solides sont dans La documentation des ressources héritées . P>
Remplacez vos paramètres solides actuels avec ceci:
def permitted_params params.permit(:widget => [:permitted_field, :other_permitted_field]) end
Je ne pense pas que ce soit une erreur de paramètre solide. Dans Rails 4.0, si un paramètre n'est pas blanchi, il échoue silencieusement et l'objet n'est pas créé. J'ai eu cette erreur un moment et je ne suis pas exactement comment le réparer, mais pouvez-vous publier votre fichier routes.rb et inclure les nouvelles méthodes de création de votre contrôleur? Je suis sûr que votre erreur est dans votre nidification de ressources. P>
Bonjour, vous devez l'utiliser de cette façon: p>
Cela peut résoudre votre problème. P> param.require (: foo) .permit (
: Nom ,: Détails,
FOO1_ATtributes: [: _Destroy ,: Nom ,: URL ,: ID],
FOO2_ATtributes: [: _Destroy ,: Min_Time ,: max_Entry ,: id]
) code> p>
Ici, rappelez-vous que l'ID d'attributs imbriqués n'est pas nécessaire en cas de création, mais il est obligé de mettre à jour des attributs imbriqués, sinon cela en créera une nouvelle copie pour vous. C'est pourquoi j'ai ajouté le champ ID dans les attributs imbriqués
J'ai fait face à un type de problème similaire. Essayez de faire ce qui suit. En supposant que vous devez mettre à jour FOO1. Utilisez ceci pour vos paramètres puissants.
def update if @foo.update_attributes!(foo_params) redirect_to foo_path else render foo1_edit_path end end
Cela peut être un peu en retard, mais je viens de faire face à cela moi-même. Espérons que cela sauvera quelqu'un d'autre un peu de temps.
Le problème avec les autres réponses Voici qu'ils ne prennent pas en compte qu'il existe un tableau code> pour la valeur de (exemple expansé de OP) em> p> à cause de Ceci, vous devez Voici comment j'ai impliqué avec succès des fonctionnalités similaires dans Mon projet: p> (formé à l'exmaple d'OP au-dessus) em> p> quelques autres choses à noter ... P > foo1_attributes code>: p>
permis code> code> foo1_attributes code> et
foo1_attributes [n] code> p>
Permettre CODE>
LI>
ID code> pour chacun (voir la page supérieure notée Commentaire pour cette réponse)
li>
has_many: via code> li>
: _ détruire code> si vous envisagez de les supprimer li>
ul> p>
Params.Require (: FOO) .permit (: attr_of_foo,: un autre_attr_of_foo,: FOO1_ATtributes => [: attr_of_foo1,: plus_attr_of_foo1], .. / code> ne fonctionne pas pour vous?
@ jo3w oui, j'ai essayé avec
param.requir (: foo) .permit (: nom ,: détail, foo1_attributes: [: nom ,: url]) code>, mais je me trompe d'erreur d'arguments .Je besoin de permettre à l'ensemble de Hash.am je manque quelque chose ici?
Duplicailler possible de Stackoverflow.com/Questtions/17371334/...