ruby on rails - Param is missing or the value is empty: ParameterMissing in ResultsController#update -
i have result belongs website. after create website create result , redirect edit page. here want add more values.
my problem is: when try update result, get:
param missing or value 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"}
this how result params looks like
def result_params params.require(:result).permit(:data) end
my model:
class result < activerecord::base belongs_to :website attr_accessor :website_id attr_accessor :data serialize :data, array end
here controller code:
class resultscontroller < applicationcontroller before_action :set_result, only: [:show, :edit, :update, :destroy] # /results # /results.json def index @results = result.all end # /results/1 # /results/1.json def show end # /results/new def new @result = result.new end # /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 |format| if @result.save format.html { redirect_to @result, notice: 'result 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 |format| if @result.update(result_params ) format.html { redirect_to @result, notice: 'result 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 |format| format.html { redirect_to results_url, notice: 'result destroyed.' } format.json { head :no_content } end end private # use callbacks share common setup or constraints between actions. def set_result @result = result.find(params[:id]) end # never trust parameters scary internet, allow white list through. def result_params params.permit(:data => []) end end
my view:
<%= form_for(@result) |f| %> <% if @result.errors.any? %> <div id="error_explanation"> <h2><%= pluralize(@result.errors.count, "error") %> prohibited result being saved:</h2> <ul> <% @result.errors.full_messages.each |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 |p| %> <div> <%= check_box_tag "data[]", get_xpath_from_node(p)%> <%= p.text %> </div> <%end%> <% end%> </div> <div class="actions"> <%= f.submit %> </div> <% end %>
and place call edit result page:
def update respond_to |format| if @website.update(website_params) format.html { redirect_to @website, notice: 'website 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 allready tryed every solution find, none of them seemed work me.
the problem lies here:
params.require(:result).permit(:data)
from require documentation,
require ensures parameter present. if it's present, returns parameter @ given key, otherwise raises actioncontroller::parametermissing error.
you requiring result
parameter it's missing params. values inside data
param. removing require should trick.
params.permit(:data)
if want keep require, wrap data
inside result
in forms.
Comments
Post a Comment