Le paramètre est manquant ou la valeur est vide: ParameterMissing dans ResultsController # update
J'ai un Résultat qui appartient à un Site web. Après j'ai créer le site, j'ai également créer le résultat et le rediriger vers sa page d'édition. Ici, je tiens à ajouter un peu plus de valeurs.
Mon problème: Quand j'essaie de mettre à jour mon Résultat, puis-je obtenir:
param is missing or the value is empty: result
Request
Parameters:
{"utf8"=>"✓", "_method"=>"patch", "authenticity_token"=>"GRN/y/04Qbsm9DzlUAbUYF8ZSv2EMHnRZgBZY/6GMDlOBdq8V5Uncij9VRp51uydC6M/qc61jPWwpUehSuc5xA==", "data"=>["//html/body/div[position() = 3]/ul/li[position() = 16]/ul/li[position() = 2]/child::text()", "//html/body/div[position()
= 3]/ul/li[position() = 16]/ul/li[position() = 2]/p/a/child::text()", "//html/body/div[position() = 3]/ul/li[position() = 16]/ul/li[position() = 4]/child::text()", "//html/body/div[position()
= 3]/ul/li[position() = 16]/ul/li[position() = 5]/a/child::text()"], "commit"=>"Update Result", "id"=>"66"}
C'est ainsi que mon Résultat params ressemble
def result_params
params.require(:result).permit(:data)
end
Mon modèle:
class Result < ActiveRecord::Base
belongs_to :website
attr_accessor :website_id
attr_accessor :data
serialize :data, Array
end
Voici mon code de contrôleur:
class ResultsController < ApplicationController
before_action :set_result, only: [:show, :edit, :update, :destroy]
# GET /Results
# GET /Results.json
def index
@results = Result.all
end
# GET /Results/1
# GET /Results/1.json
def show
end
# GET /Results/new
def new
@result = Result.new
end
# GET /Results/1/edit
def edit
@result = Result.find(params[:id])
end
# POST /Results
# POST /Results.json
def create
@result = Result.new(result_params)
respond_to do |format|
if @result.save
format.html { redirect_to @result, notice: 'Result was successfully created.' }
format.json { render :show, status: :created, location: result }
else
format.html { render :new }
format.json { render json: @result.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /Results/1
# PATCH/PUT /Results/1.json
def update
respond_to do |format|
if @result.update(result_params )
format.html { redirect_to @result, notice: 'Result was successfully updated.' }
format.json { render :show, status: :ok, location: @result }
else
format.html { render :edit }
format.json { render json: @result.errors, status: :unprocessable_entity }
end
end
end
# DELETE /Results/1
# DELETE /Results/1.json
def destroy
@result.destroy
respond_to do |format|
format.html { redirect_to results_url, notice: 'Result was successfully destroyed.' }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_result
@result = Result.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def result_params
params.permit(:data => [])
end
end
Mon point de vue:
<%= form_for(@result) do |f| %>
<% if @result.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@result.errors.count, "error") %> prohibited this result from being saved:</h2>
<ul>
<% @result.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<% if @result.website.url != nil %>
<%= atts = get_all_elements(@result.website.url)%>
<% atts.each do |p| %>
<div>
<%= check_box_tag "data[]", get_xpath_from_node(p)%>
<%= p.text %>
</div>
<%end%>
<% end%>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
Et c'est l'endroit où j'appelle la modifier la page de résultat:
def update
respond_to do |format|
if @website.update(website_params)
format.html { redirect_to @website, notice: 'Website was successfully updated.' }
format.json { render :show, status: :ok, location: @website }
else
format.html { render :edit }
format.json { render json: @website.errors, status: :unprocessable_entity }
end
end
end
Ive déjà essayé toutes les solutions que j'ai pu trouver, mais aucun d'eux ne semblait fonctionner pour moi.
source d'informationauteur user2926430 | 2015-06-14
Vous devez vous connecter pour publier un commentaire.
Le problème se situe ici:
De exiger documentation,
Vous êtes exigeant
result
paramètre, mais il manque de la params. Toutes vos valeurs sont à l'intérieur dedata
param. Retrait d'exiger devrait faire l'affaire.Si vous voulez garder l'exigent, l'envelopper
data
à l'intérieur deresult
dans les formes.Je sais, ce que vous avez rencontré. si vous avez une forte params est
Vos paramètres de format comme ce
et des paramètres est juste
donc, vous devez supprimer le "résultat"
Cette erreur se produit également si vous essayez d'avoir un formulaire de soumission sans aucun domaines. Si vous voulez juste la valeur unique que vous êtes en passant par l'intermédiaire d'un bouton param vous pouvez utiliser un hidden_field comme un travail autour de.