offensichtlich bin ich ziemlich neu zu Schienen, also bleib bei mir.Rails Pass-Parameter auf "neue" Methode
Ich habe einen Konstruktor mein Modell
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
und diese Art von verkorksten Dingen für mich gegeben. Befor Ich habe eine Methode hatte ‚neuen‘ in meinem Controller wie diese
def new
@movies = Movie.new
end
und es funktionierte gut, bevor die initialize kam. Es erfordert Parameter, die an die "neue" Methode übergeben werden, aber das wurde getan, nachdem eine Ansicht geöffnet wurde, um Argumente von einem Benutzer zu übergeben und sie zu speichern. Jetzt kann ich diese Ansicht nicht öffnen, weil ich einen Fehler
wrong number of arguments (0 for 3)
Der Konstruktor erhalten wurde aufgrund der Tatsache, habe ich writting Test für meine Anwendung gestartet und das Standard-Werte annehmen für den Konstruktor Einstellung wird diesen Test zunichte machen. Vorschlag zur Lösung dieses Problems?
EDIT: Meine Tests wie folgt aussehen:
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
Ohne diesen Konstruktor alle die Tests fehlschlagen ....
Vorschlag: Wenn Sie nur Standardwerte für Tests festlegen müssen, verwenden Sie eine Factory für das Testen, die Möglichkeiten zum Festlegen von Standardwerten bietet und diese nicht in Ihren Anwendungscode einblendet. Wenn Sie dies aus anderen Gründen tun müssen, [siehe diese Frage] (http://stackoverflow.com/questions/328525/what-is-the-best-way-to-set-default-values-in-actrecord) – numbers1311407
Ich habe Argumente in meinen Tests angegeben. Nicht das Problem. Test hat geprüft, ob es weniger als 3 Argumente gibt, dazu musste der Konstruktor hinzugefügt werden, wodurch dieses Problem auftrat. –
Ok, neuer Vorschlag: Schreiben Sie keine Tests, die die Kernfunktion active_record ohne Grund brechen und Sie zwingen, Codezähler zu weit verbreiteten Rails-Komponenten zu schreiben, um sie zu reparieren. 'ActiveRecord :: Base # initialize' akzeptiert ein Parameterobjekt, keine Liste von Argumenten. Wenn Sie darauf bestehen, einen solchen primären Teil von active_record zu brechen, dann wird dies das erste von vielen Problemen für Sie sein. – numbers1311407