明らかに私はレールが新しくなっていますので、私についてください。レールはパラメータを '新しい'メソッドに渡します
私は私のモデル
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
と私のために台無しに物事のその種にコンストラクタを追加しました。私はこの
def new
@movies = Movie.new
end
のような方法で「新しい」私のコントローラ内に持っていたし、初期化が登場する前に、それがうまく働いたBefor 。 'new'メソッドに渡すパラメータが必要ですが、ユーザーからの引数を渡して保存するビューを開いた後に実行されます。今、私はそのビューを開くことができない私は、エラー
wrong number of arguments (0 for 3)
を得るため、コンストラクタが原因私は自分のアプリケーションのためのテストを足す開始し、コンストラクタのデフォルトvaulesを設定すると、そのテストが無効になります実際に追加されました。これを解決するための提案?
EDIT: 私のテストは次のようになります。すべてのテストが失敗したことがなければ、コンストラクタ
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
....
提案:あなただけのデフォルトを設定するには、アプリケーションコードにこのブリードない方法を提供し、テストのための工場を使用し、テストのためにデフォルト値を設定する必要がある場合。他の理由でこれを行う必要がある場合、[この質問を参照してください](http://stackoverflow.com/questions/328525/what-is-the-best-way-to-set-default-values-in-activerecord) – numbers1311407
私は自分のテストで賛成論をします。問題ではありません。テストでは、3つ以下の引数があるかどうかをチェックしていました。これを行うには、コンストラクタを追加する必要がありました。そうすることによって、この問題が発生しました。 –
OK、新しい提案:コアのactive_record機能を何ら理由なく中断するテストを書いてはいけません。広く使われているレールコンポーネントのコードカウンタを修正して修正する必要があります。 'ActiveRecord :: Base#initialize'は引数のリストではなく、パラメータオブジェクトを受け入れます。あなたがactive_recordのようなプライマリの断片を壊すことを主張するなら、これはあなたのための多くの問題の最初になるでしょう。 – numbers1311407