Pourquoi suis-je argument de gamme d'exception
Im rails débutant sur Rails 4. Im essayant de créer une liste de vin qui prend le nom de la cave et de l'année de la bouteille. Voici mon formulaire
<%= form_for @wine do |f| %>
<%# render "errors", object: @wine %>
<div class="form-group input-group input-group-lg">
<%= f.text_field :name, placeholder: "Enter the winery name", class: "form-control input-lg" %>
</div>
<div class="form-group input-group input-group-lg">
<%= select_year(Date.today, start_year: Time.now.year, end_year: Time.now.year - 90, field_name: :year, prefix: :wine) %>
</div>
<div class="form_group input-group">
<%= f.submit "Add wine", class: "btn btn-success" %>
</div>
<% end %>
Voici mon contrôleur
class WinesController < ApplicationController
before_action :set_wine, only: [:show, :edit, :update, :destroy]
def index
@wines = Wine.all
end
def new
@wine = Wine.new
end
def create
@wine = Wine.new(wine_params)
if @wine.save
flash[:notice] = "Successfully created..."
redirect_to @wine
else
flash.now[:error] = "There was a problem"
render "new"
end
end
def show
end
def edit
end
def update
if @wine.update(wine_params)
redirect_to @wine
else
flash[:error] = "Something went wrong"
render "edit"
end
end
def destroy
@wine.destroy
redirect_to wines_path
end
private
def set_wine
@wine = Wine.find(params[:id])
end
def wine_params
params.require(:wine).permit(:name, :year)
end
end
J'ai mes vins de table avec un nom:chaîne de caractères de la colonne et d'un an:colonne datetime
Chaque fois que j'essaie de créer un nouveau vin, je reçois un argument out of range
exception et il met en évidence @wine = Wine.new(wine_params)
dans mon action de création. Ce que je fais mal?
Mon journal
Started GET "/wines/new" for 127.0.0.1 at 2013-09-04 10:55:54 -0700
Processing by WinesController#new as HTML
Rendered wines/_form.html.erb (2.0ms)
Rendered wines/new.html.erb within layouts/application (2.6ms)
Rendered layouts/_header.html.erb (0.2ms)
Rendered layouts/_footer.html.erb (0.1ms)
Completed 200 OK in 10ms (Views: 9.3ms | ActiveRecord: 0.0ms)
Started GET "/assets/comingsoonbg.png" for 127.0.0.1 at 2013-09-04 10:55:54 -0700
Started GET "/wines/new" for 127.0.0.1 at 2013-09-04 10:55:54 -0700
Processing by WinesController#new as HTML
Rendered wines/_form.html.erb (2.1ms)
Rendered wines/new.html.erb within layouts/application (2.7ms)
Rendered layouts/_header.html.erb (0.2ms)
Rendered layouts/_footer.html.erb (0.1ms)
Completed 200 OK in 10ms (Views: 9.8ms | ActiveRecord: 0.0ms)
Started POST "/wines" for 127.0.0.1 at 2013-09-04 10:55:59 -0700
Processing by WinesController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"FCd3wvCov+mugnJuzwplKD/eVskJKgxweh1mK0pG2wM=", "wine"=>{"name"=>"kjkljhk", "year"=>"2013"}, "commit"=>"Add wine"}
Completed 500 Internal Server Error in 1ms
ArgumentError (argument out of range):
app/controllers/wines_controller.rb:13:in `create'
Rendered /Users/me/.rvm/gems/ruby-2.0.0-p247/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/_source.erb (0.7ms)
Rendered /Users/me/.rvm/gems/ruby-2.0.0-p247/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/_trace.erb (0.9ms)
Rendered /Users/me/.rvm/gems/ruby-2.0.0-p247/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (0.9ms)
Rendered /Users/me/.rvm/gems/ruby-2.0.0-p247/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (16.2ms)
Mon schéma pour les vins dans le schéma.rb
create_table "wines", force: true do |t|
t.datetime "year"
t.datetime "created_at"
t.datetime "updated_at"
t.string "name"
end
Quel est le contenu de
Quel est votre journal dire? Ce qui est retourné à partir de wine_params?
mon
Le
Vous pouvez poster votre Vin modèle et le Vin du schéma du schéma.rb
wine_params
?Quel est votre journal dire? Ce qui est retourné à partir de wine_params?
mon
wine_params
sont définis dans le fond de mon fichier de contrôleur et de Mauvais après le journal avec ce qui se passe après la tentative de créer un vinLe
year
colonne contient un entier ou une chaîne, pas un Jour, pas vrai?Vous pouvez poster votre Vin modèle et le Vin du schéma du schéma.rb
OriginalL'auteur oobie11 | 2013-09-04
Vous devez vous connecter pour publier un commentaire.
Date et l'Heure toujours me demander de réfléchir à deux fois! Dans le journal,
params
contient une chaîne de caractères avec l'année de laselect_year
. La solution la plus simple était de simplement stocker la représentation entière, si tout ce que vous aurez besoin sont des années. Si vous modifiez ultérieurement àselect_date
, vous aurez besoin pour construire un objet Date de votre contrôleur en extrayant les pièces de laparams
de hachage. Voir Formulaire D'Aides Guide pour plus de détails... eh bien, ici, est un peu juste.Dans la vue:
Dans le contrôleur, pour faire de votre Date objet:
ActiveRecord s'attend à un attribut d'avoir une entrée dans le
params
de hachage, mais aussi de la Date d'objets nécessitent de multiples valeurs. La date helperdate_select
(passelect_date
) va passer de nouveau un hachage qui Rails de convertir, avec multiparamétrique de cession, pour une Date lors de la mesure de masse.Si vous avez utilisé
date_select
, à vous de voir quelque chose comme cela dans les paramètres de hachage:Avis les clés dans la
:person
de hachage décrire l'ordre et le type de la multipart objet, de telle sorte que les Rails peuvent comprendre comment créer l'attribut (par exemple, la clé de hachagebirth_date(2i)
est la deuxième composante de labirth_date
attribut d'une Personne objet de modèle et est un entier).OriginalL'auteur Fred