带有验证的rails表单总是失败

时间:2017-02-07 20:49:38

标签: ruby-on-rails validation

我坚持这个......已经问了几个问题,但无法理解这个问题。

我有一个用于添加参考书目(模型Biblio)的表单,该表单在参考书目的title上有一个简单的验证字段。

即使添加了有效数据,验证也始终失败。

模型

class Biblio < ApplicationRecord

    # validates_presence_of :auteurs => there's a nested form too but
    # I commented it out in order to isolate the problem

    accepts_nested_attributes_for :auteurs
    validates :titre, presence: true

CONTROLLER

(全文和我没有翻译以避免拼写错误)

def new
    @biblio = Biblio.new(params_biblio)
    @biblio.auteurs.build
end

def nouveau 
# this method renders 'nouveau.html.erb', 
# that contains the form allowing the addition of bibliography
    @biblio = Biblio.new

    if params[:id] # id is an optional parameter
        @auteur = Auteur.find(params[:id])
        @idauteur = @auteur.id
    end
  end

def ajouter
# is the method that treats the post form that was sent

    @biblio = Biblio.new
    if @biblio.save
        # the 4 following lines are irrelevant here as they only add the 
        # second and subsequent authors to the join table. 
        # No validation and works fine.
        b = auteurs_devises(params[:biblio][:auteurs])
        aut = b.map do |var|
            lett = Auteur.find(var) 
            lett.biblios << @biblio
        end
        redirect_to voir_biblio_url(Biblio.last)
     else
       if params[:id]
           @auteur = Auteur.find(params[:id])
           @idauteur = @auteur.id
       end
       render 'nouveau'
     end
 end

观点:

<%= form_for :biblio, url: administration_ajoute_biblio_url do |f| %>

<%= f.fields_for :auteurs do |aut| %>
    <%= aut.label t('auteur') %>
    <%= aut.text_field :nom , :name =>"biblio[auteurs][nom]", data: {autocomplete_source: auteurs_enum_path} %>
<% end %>

<%= f.label t('titre').capitalize  %>
    <%= f.text_field :titre %>

这些是发送到方法nouveau的参数:

Started POST "/administration/biblios/nouveau" for ::1 at 2017-02-07 21:28:28 +0100
Processing by Administration::BibliosController#ajouter as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"+354h4M0Tg+BX21XAuQ6YMKS0BGQ8UjET8paKjkGCBsS1up1lB131KsoaCy563X4juDz0EJy46WgXbHcu51Kgw==", "biblio"=>{"auteurs"=>{"nom"=>"Godding"}, "titre"=>"Test Tuesday Evening", "soustitre"=>"", "recueil"=>"", "editeur"=>"", "annee"=>"", "isbn"=>"", "genre"=>"source", "revue_id"=>"", "revue_no"=>"", "revue_page"=>"", "lieu"=>"", "commentaire"=>""}, "commit"=>"Enregistrer"}
  (0.2ms)  BEGIN
  (0.1ms)  ROLLBACK
  Rendering administration/biblios/nouveau.html.erb within layouts/messources

再次控制器

def params_biblio
params.require(:biblio).permit(
                        :titre, 
                        :soustitre, 
                        :editeur, 
                        :isbn, 
                        :recueil, 
                        :genre, 
                        :revue_id, 
                        :revue_no, 
                        :revue_page, 
                        :annee, 
                        :lieu, 
                        :commentaire,
                        auteurs: [:nom] )
end

为了完整起见,这是我的routes.rb:

# ADMINISTRATION => BIBLIOGRAPHIE
get 'biblios/nouveau(/:id)' => 'biblios#nouveau', as: 'nouvelle_biblio'  
post 'biblios/nouveau(/:id)' => 'biblios#ajouter', as: 'ajoute_biblio'
delete 'biblios/supprime/:id' => 'biblios#supprime', as: 'supprime_biblio'
get 'biblios/maj/:id' => 'biblios#cherche_maj', as: 'maj_biblio'
patch 'biblios/maj/:id' => 'biblios#maj', as: 'patch_maj_biblio'
我必须失明。我做错了什么......我给这个参考书目('测试星期二晚上')标题,这是我留下验证的唯一字段,尽管如此,验证总是失败。

0 个答案:

没有答案