samedi 16 mai 2015

Rails : error param is missing or the value is empty : annonce

I want to creat a classified ads website for a project in school and I try to create a form to send a message by email at a member of the website. The email adress is contained in a model which is name "Membre" and this model is link at a model who is name "Annonce" which contained the ad.

But when I try to create that, I have this error :

param is missing or the value is empty: annonce

app/controllers/annonces_controller.rb:104:in `annonce_params'

app/controllers/annonces_controller.rb:29:in `create'

Here the Ad controller :

class AnnoncesController < ApplicationController

  before_action :set_annonce, only: [:show, :edit, :update, :destroy]
  before_filter :authenticate_user!, :except => [:index]

  # GET /annonces
  # GET /annonces.json
  def index
    @annonces = Annonce.all
  end

  # GET /annonces/1
  # GET /annonces/1.json
  def show
  end

  # GET /annonces/new
  def new
    @annonce = Annonce.new
  end

  # GET /annonces/1/edit
  def edit
  end

  # POST /annonces
  # POST /annonces.json
  def create
    @annonce = Annonce.new(annonce_params)
    @annonce.membre_id = current_membre.id
    respond_to do |format|
      if @annonce.save
        format.html { redirect_to @annonce, notice: t('annonce_cree_succes') }
        format.json { render :show, status: :created, location: @annonce }
      else
        format.html { render :new }
        format.json { render json: @annonce.errors, status: :unprocessable_entity }
      end
    end
  end

  # PATCH/PUT /annonces/1
  # PATCH/PUT /annonces/1.json
  def update
    respond_to do |format|
      if @annonce.update(annonce_params)
        format.html { redirect_to @annonce, notice: t('annonce_cree_succes') }
        format.json { render :show, status: :ok, location: @annonce }
      else
        format.html { render :edit }
        format.json { render json: @annonce.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /annonces/1
  # DELETE /annonces/1.json
  def destroy
    @annonce.destroy
    respond_to do |format|
      format.html { redirect_to annonces_url, notice: t('annonce_destroy_succes') }
      format.json { head :no_content }
    end
  end

  # GET /annonces/contact/1
  def contact
    @form_contact = FormContact.new
    if @form_contact.valid?
      #MembreMailer.email_contact(Membre.where(:id => @annonce.membre_id ),current_membre,@annonce,@message)
      @annonce = Annonce.find(params[:id])
      @recepteur = Membre.where(:id => @annonce.membre_id )
      @membre = current_membre
      mail(:to => "#{recepteur.pseudo} <#{recepteur.email}>", subject: 'Reponse à l\'une de vos annnonces')
      redirect_to root
    end
  end

  # GET /annonces/report/1
  def report
    @annonce = Annonce.find(params[:id])
  end

  private

    def authenticate_user!
        if membre_signed_in?
            #super
        else
            redirect_to login_path, :notice => 'Merci de vous connecter pour effecter cette action'
            ## if you want render 404 page
            ## render :file => File.join(Rails.root, 'public/404'), :formats => [:html], :status => 404, :layout => false
        end
    end

Here the view contact :

<div class="col-md-offset-2 col-md-8 well panel panel-default">
    <h2 class='panel-heading text-center'><%= t('contacter') %></h2>
    <div class="panel-body text-center">
        <%= form_for(:form_contact, :url => {:action => :create}) do |f| %>
            <div class="field block-center">
                <%= f.label "message" %></br>
                <%= f.text_area(:message, size: "50x15")%>
            </div></br>
            <div class="actions form-group col-md-offset-3 col-md-6">
                <%= submit_tag t('envoyer'), :class => "btn btn-large btn-block btn-primary" %>
            </div>
        <% end %>
    </div>
</div>

<p class='row'> </p>

And here the FormContact class:

class FormContact < ActiveForm::Base
    attr_accessor :message
    validates_presence_of :message

    def new
        @form_contact = FormContact.new(login_form)
    end

    def index
        @form_contact = FormContact.new
    end

    private

    def login_form
        params.require(:form_contact).permit(:message)
    end
end

How can I fix that ?

Thanks in advance

Aucun commentaire:

Enregistrer un commentaire