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 istdb/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!
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. –