2016-12-22 3 views
1

Ich verwende Rails 4 und ich habe ein Namensfeld auf einer Seite, um ein Pornostar in einer App zu erstellen. Wenn ich versuche, eine neue Instanz des Pornostar-Objekts zu erstellen, erhalte ich die Fehlermeldung, dass das Namensfeld nicht leer sein darf. Ich bin nicht sicher, warum ich diese Fehler bekomme, wenn sie nicht leer sind ...Schienen bilden Auswahl Eingänge geben "Kann nicht leer sein" Fehler, wenn sie nicht leer sind

Ich benutze simple_form, um meine Formulare zu generieren.

hier ist die Form, Teil Ich verwende:

app/views/pages/English/_form.html.erb

<%= simple_form_for @pornstar do |f| %> 
    <% if @pornstar.errors.any? %> 
    <div id="error_explanation"> 
     <h2> 
     <%= "#{pluralize(@pornstar.errors.count, "error")} prohibited this post from being saved:" %> 
     </h2> 
     <ul> 
     <% @pornstar.errors.full_messages.each do |msg| %> 
      <li> 
      <%= msg %> 
      </li> 
      <% end %> 
     </ul> 
    </div> 
    <% end %> 
    <%= f.input :name %> 
    <%= f.input :link %> 
    <%= f.submit 'Save' %> 
<% end %> 

Die haupt; Tabelle als dieser

definiert ist

db/schema.rb

create_table "pornstars", force: :cascade do |t| 
    t.string "name" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    t.string "link" 
    end 

Hier ist meine haupt; Modelldatei

app/models/pornstar.rb

class Pornstar < ActiveRecord::Base 
    has_and_belongs_to_many :videos 
    has_many :categories, through: :videos 

    validates :name, presence: true, length: { maximum: 105 }, 
    uniqueness: { case_sensitive: false } 

end 

Ich las, dass dies ein Controller-Fehler sein, und dass ich so stark params, um sicherzustellen, hatte akzeptiert die Attribute, aber es scheint in meinem Fall nichts zu ändern.

Hier ist mein Controller

app/controllers/pornstars_controller.rb

class PornstarsController < ApplicationController 

    #Show all pornstars action 
    def index 
     @pornstar = Pornstar.all 
    end 

    #New action for adding a pornstar 
    def new 
     if current_user.try(:admin?) 
      @pornstar = Pornstar.new 
     else 
      redirect_to root_path 
     end 
    end 

    #Create action saves the pornstar into the database 
    def create 
     @pornstar = Pornstar.new 
     if @pornstar.save(pornstar_params) 
      flash[:notice] = "Successfully posted pornstar!" 
      redirect_to pornstar_path(@pornstar) 
     else 
      flash[:alert] = "Error posting new pornstar!" 
      render :new 
     end 
    end 

    #Edit action retrieves the video and renders the edit page 
    def edit 
     if current_user.try(:admin?) 
     else 
      redirect_to root_path 
     end 
    end 

    #Update action updates the video with the new information 
    def update 
     if @pornstar.update_attributes(pornstar_params) 
      flash[:notice] = "Successfully updated pornstar!" 
      redirect_to pornstar_path(@pornstar) 
     else 
      flash[:alert] = "Error updating pornstar!" 
      render :edit 
     end 
    end 

    #The show action renders the individual video after finding the ID 
    def show 
    end 

    #The destroy action permanently deletes the video from the database 
    def destroy 
     if @pornstar.destroy 
      flash[:notice] = "Successfully deleted pornstar!" 
      redirect_to pornstars_path 
     else 
      flash[:notice] = "Error updating pornstar!" 
     end 
    end 

    private 

    def pornstar_params 
     params.require(:pornstar).permit(:name, :link) 
    end 

    def find_pornstar 
     @pornstar = Pornstar.find(params[:id]) 
    end 
end 

Ich habe keine Ahnung, wo das Problem ist. Was schlagen Sie vor?

Vielen Dank im Voraus!

bearbeiten

Hier ist, was ich in den log/development.log

Started GET "/pornstars/new" for 69.159.166.176 at 2016-12-22 04:20:15 +0000 
Cannot render console from 69.159.166.176! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255 
Processing by PornstarsController#new as HTML 
[1m[35mUser Load (0.2ms)[0m SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT 1 [["id", 1]] 
    Rendered pornstars/_form.html.erb (6.9ms) 
    Rendered pornstars/new.html.erb within layouts/application (7.8ms) 
    Rendered layouts/_header.html.erb (0.4ms) 
Completed 200 OK in 54ms (Views: 51.2ms | ActiveRecord: 0.2ms) 


Started POST "/pornstars" for 69.159.166.176 at 2016-12-22 04:20:24 +0000 
Cannot render console from 69.159.166.176! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255 
Processing by PornstarsController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"CQeWAfAWnTNBLITi7ieIokbg8HtPQ80rBTMfv7TwFeeBsVv0UWixynUObyPLi2jD9rz4zj0Necf08i9UmcHD+w==", "pornstar"=>{"name"=>"Matilde", "link"=>"http://"}, "commit"=>"Save"} 
[1m[36m (0.1ms)[0m [1mbegin transaction[0m 
    [1m[35mPornstar Exists (0.2ms)[0m SELECT 1 AS one FROM "pornstars" WHERE "pornstars"."name" IS NULL LIMIT 1 
[1m[36m (0.1ms)[0m [1mrollback transaction[0m 
    Rendered pornstars/_form.html.erb (7.4ms) 
    Rendered pornstars/new.html.erb within layouts/application (8.2ms) 
    [1m[35mUser Load (0.2ms)[0m SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT 1 [["id", 1]] 
    Rendered layouts/_header.html.erb (1.8ms) 
    Completed 200 OK in 141ms (Views: 136.2ms | ActiveRecord: 0.7ms) 

Thanks again gefunden!

bearbeiten 2

So entfernte ich die Einmaligkeit Validierung (nur um zu sehen, was sonst den Fehler verursacht werden könnten) und versucht, einige gültige Informationen eingeben.

Jetzt bin immer ich diesen

Started POST "/pornstars" for 69.159.166.176 at 2016-12-22 12:50:47 +0000 
Cannot render console from 69.159.166.176! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255 
Processing by PornstarsController#create as HTML 
Parameters: {"utf8"=>"✓", "authenticity_token"=>"NcNhg4jPVK8WcQjrQIbTulBzT0n0/Pe9/hmDGcT5mDy9dax2KbF4ViJT4yplKjPb4C9H/IayQ1EP2LPy6chOIA==", "pornstar"=>{"name"=>"Crystal", "link"=>"http://1234"}, "commit"=>"Save"} 
[1m[36m (0.1ms)[0m [1mbegin transaction[0m 
    [1m[35m (0.1ms)[0m rollback transaction 
Rendered pornstars/_form.html.erb (5.7ms) 
    Rendered pornstars/new.html.erb within layouts/application (6.4ms) 
    [1m[36mUser Load (0.2ms)[0m [1mSELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT 1[0m [["id", 1]] 
    Rendered layouts/_header.html.erb (1.8ms) 
Completed 200 OK in 44ms (Views: 40.4ms | ActiveRecord: 0.4ms) 

Und die gleiche Fehlermeldung, dass der Name Feld nicht leer sein.

Nochmals vielen Dank für die Beantwortung meiner Frage!

+0

Hallo und willkommen zu Stack Overflow. Zuerst - schau in deine Logfiles. Dies wird entweder in Ihrem Terminal-Konsole-Fenster oder in "log/development.log" sein. Übermitteln Sie das Formular und sehen Sie, was ausgedruckt wird - kopieren Sie das, bearbeiten Sie Ihre Frage und fügen Sie sie ein, damit wir sie sehen können. Wir brauchen vor allem die "Parameter" -Linie - um nach Inkonsistenzen zwischen dem, was Sie erwarten und dem, was Sie bekommen, aber die nächsten Zeilen sind auch nützlich, da sie uns sagen, wenn Ihre Erlaubnis/erfordern Linien sind nicht ganz was Sie erwarten von. –

Antwort

0

Sie haben eine Validierung hinzugefügt, so dass der Datensatz nicht, wenn der Name Feld nicht

validates :name, presence: true, length: { maximum: 105 }, 

Von Ihrem development.log vorgesehen speichern sollte ich, dass der Name Parameter, warum seine Null, das ist sehen kann, ist ein Fehler werfen .

[1m[35mPornstar Exists (0.2ms)[0m SELECT 1 AS one FROM "pornstars" WHERE "pornstars"."name" IS NULL LIMIT 1 

Bitte versuchen, einigen gültigen Wert im Namensfeld Senden (dass die nam ist, sollte e eindeutig sein, weil es eine Bestätigung für die Einzigartigkeit auch ist, und es soll nicht gleich Null sein).

+0

Vielen Dank. Ich habe die Eindeutigkeitsüberprüfung entfernt, und obwohl jetzt ein gültiger Name zu sein scheint, sagt das Formular immer noch, dass es leer ist. Das Protokoll scheint jedoch anzuzeigen, dass der Name nicht null ist. Ich habe keine Ahnung, was los ist. –

+0

Verwenden Sie a! nach @ Pornstar.save so dass Sie herausfinden können, was genau das Problem in Ihrer Konsole ist –

Verwandte Themen