0

en espérant que quelqu'un puisse vous aider. J'ai cherché à travers d'autres questions "param is missing", mais n'arrive pas à comprendre ce qui ne va pas.Vous ne savez pas pourquoi les params forts ne fonctionnent pas - param est manquant ou la valeur est vide:

Dans mes itinéraires fichier j'ai cette ressource imbriquées "actions"

resources :jobs do 
    resources :actions 
end 

Les modèles associés. Ignorer "action_reference". C'est autre chose.

class Job < ActiveRecord::Base 
    has_many :actions 
end 

class Action < ActiveRecord::Base 
    belongs_to :job 
    belongs_to :action_reference 
end 

Et je suis en train de créer une nouvelle action en faisant une requête POST en utilisant button_to

Voici le ActionsController

class ActionsController < ApplicationController 
    before_action :set_job 
    before_action :set_action, only: [:show, :edit, :update] 

    # GET /jobs/:job_id/actions/:id 
    def show 
    end 

    # GET /jobs/:job_id/actions/new 
    def new 
    @action = Action.new 
    end 

    # GET /jobs/:job_id/actions/:id/edit 
    def edit 
    end 

    # POST /jobs/:job_id/actions/ 
    def create 
    @action = @job.actions.create(action_params) 
    if @action.save 
     flash[:success] = "Next step successfully added." 
     redirect_to jobs_path 
    else 
     flash[:danger] = @action.errors.full_messages.join(", ") 
     redirect_to new_job_action_path 
    end 
    end 

    # PATCH to /jobs/:job_id/actions/:id 
    def update 
    if @action.update(action_params) 
     flash[:success] = "Next step successfully updated." 
     redirect_to jobs_path 
    else 
     flash[:danger] = @action.errors.full_messages.join(", ") 
     redirect_to edit_job_action_path 
    end 
    end 

    private 
    def set_job 
     @job = Job.find(params[:job_id]) 
    end 

    def set_action 
     @action = Action.find(params[:id]) 
    end 

    def action_params 
     params.require(:action).permit(:action_reference_id, :job_id, :completed_at, :next_action_date) 
    end 
end 

Et voici mon button_to

<%= button_to answer[:text], post_action_jobs_path(@job), method: "post", params: { action: { action_reference_id: answer[:action_reference_id], job_id: @job_id , completed_at: answer[:action_completed_at], next_action_date: answer[:next_action_date] } }, type: "button", class: "btn btn btn-info btn-block" %> 

I savoir que le problème a quelque chose à voir avec les arguments que je passe au post_action_jobs_path en t La vue ou ceux que je passe à action_params dans le contrôleur, mais je ne peux pas le comprendre.

Quand je lance ce que j'obtiens l'erreur:

undefined method `permit' for "create":String Did you mean? print 

j'ai vu un peu de fil il y a quelque temps dire quelque chose au sujet de « l'action » étant un mot réservé dans Rails, vous devez utiliser autre chose, mais Si c'est vrai, je ne suis pas sûr de savoir comment s'y prendre.

Toute aide serait grandement appréciée :)

Répondre

0

Oui, malheureusement, cela est dû au fait que "l'action" est une méthode existante dans les contrôleurs de rails. Il est utilisé pour obtenir le nom de l'action qui a été appelée. Dans ce cas, "action" sera égale à la chaîne "create". Une chose que vous pourriez faire serait de renommer votre modèle d'action à JobAction et d'utiliser params.require (: job_action)

0

Malheureusement, je ne semblait pas pouvoir trouver loin autour, alors je renommé ma table « actions » et remplacé toute référence à « l'action » avec un autre mot « étape ". Maintenant ça marche!