rails de passer des paramètres à la "nouvelle" méthode
évidemment, je suis tout à fait nouveau pour les rails, de sorte bâton avec moi.
J'ai ajouté un constructeur à mon modèle
class Movie < Media
attr_accessible :director, :studio
attr_accessor :director, :studio
validates_presence_of :director, :studio, :title
def initialize title, director, studio
@title = title
@director = director
@studio = studio
end
end
et ce genre de foiré les choses pour moi.
Avant, j'avais une méthode de "nouveau" dans mon contrôleur comme ce
def new
@movies = Movie.new
end
et cela a fonctionné bien avant de l'initialiser. Il exige de paramètres à passer à la "nouvelle " méthode", mais qui a été faite après qu'un avis a été ouvert pour le passage d'arguments à partir d'un utilisateur et de les enregistrer. Maintenant, je ne peux pas ouvrir ce point de vue, car j'obtiens une erreur
wrong number of arguments (0 for 3)
Le constructeur a été ajouté en raison du fait que j'ai commencé l'écriture du test pour mon application et de la configuration par défaut vaules pour le constructeur d'annuler cette épreuve. Suggestion sur la résolution de ce?
EDIT:
Mes tests ressembler à ceci:
require 'spec_helper'
describe Movie do
before :each do
@movie = Movie.new "Bullet", "John", "20th"
end
describe "#{new}" do
it "returns new object of Movie" do
@movie.should be_an_instance_of Movie
end
it "throws ArgumentError when give less than 3 parameters" do
lambda {Movie.new(:director => "John", :studio => "20th")}.should raise_exception ArgumentError
end
end
describe "#title" do
it "returns the correct title" do
@movie.title.should eql "Bullet"
end
end
describe "#director" do
it "returns the correct director" do
@movie.director.should eql "John"
end
end
describe "#studio" do
it "returns the correct studio" do
@movie.studio.should eql "20th"
end
end
end
Sans que le constructeur de tous les tests échouent....
Je ne provied arguments dans mes tests. Pas le problème. Le Test a été de vérifier si il y a moins de 3 arguments provieded, à ne qui avait pour ajouter le constructeur, en faisant ainsi, ce problème s'est produit.
Ok, nouvelle suggestion: Ne pas écrire des tests pause de base active_record fonctionnalité pour aucune raison, vous forçant à écrire du code encontre largement utilisé rails de composants pour les corriger.
ActiveRecord::Base#initialize
accepte un paramètre de l'objet, et non une liste d'arguments. Si vous insistez sur la rupture d'une telle primaire morceau de active_record alors ce qui se passe pour être le premier de beaucoup de problèmes pour vous.OriginalL'auteur radical_edo | 2013-02-09
Vous devez vous connecter pour publier un commentaire.
Le constructeur par défaut fournis par ActiveModel est assez bonne. Si vous supprimez le constructeur que vous avez écrit, vous devriez être en mesure d'utiliser le constructeur par défaut comme ceci:
Lorsque vous ne souhaitez pas fournir les trois arguments (comme dans votre
new
action), vous pouvez coller avec@movie = Movie.new
OriginalL'auteur graysonwright