Rails:错误参数丢失或值为空:annonce
Rails : error param is missing or the value is empty : annonce
我想为学校的一个项目创建一个 class 广告网站,我尝试创建一个表单以通过电子邮件向该网站的成员发送消息。电子邮件地址包含在名为“Membre”的模型中,该模型 link 位于包含广告的名为“Annonce”的模型中。
但是当我尝试创建它时,我遇到了这个错误:
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'
这里是广告控制器:
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
# Use callbacks to share common setup or constraints between actions.
def set_annonce
@annonce = Annonce.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def annonce_params
params.require(:annonce).permit(:id, :titre, :corps, :prix, :membre_id, :categorie, :created_at, :image)
end
这里是查看联系人:
<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>
这里是 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
我该如何解决?
提前致谢
这是路由错误,你应该调用FormContactsController
的create
方法,而不是AnnoncesController create
方法。
<%= form_for(:form_contact, :url => {:controller => "FormContactsController", :action => :create}) do |f| %>
我想为学校的一个项目创建一个 class 广告网站,我尝试创建一个表单以通过电子邮件向该网站的成员发送消息。电子邮件地址包含在名为“Membre”的模型中,该模型 link 位于包含广告的名为“Annonce”的模型中。
但是当我尝试创建它时,我遇到了这个错误:
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'
这里是广告控制器:
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
# Use callbacks to share common setup or constraints between actions.
def set_annonce
@annonce = Annonce.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def annonce_params
params.require(:annonce).permit(:id, :titre, :corps, :prix, :membre_id, :categorie, :created_at, :image)
end
这里是查看联系人:
<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>
这里是 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
我该如何解决?
提前致谢
这是路由错误,你应该调用FormContactsController
的create
方法,而不是AnnoncesController create
方法。
<%= form_for(:form_contact, :url => {:controller => "FormContactsController", :action => :create}) do |f| %>