"20th")}.should raise_excepti-6ren">
gpt4 book ai didi

ruby-on-rails - rails将参数传递给 'new'方法

转载 作者:行者123 更新时间:2023-12-04 17:37:09 27 4
gpt4 key购买 nike

显然我对 Rails 很陌生,所以坚持我。

我在我的模型中添加了一个构造函数

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

那种对我来说很糟糕的事情。
在我的 Controller 中有一个像这样的"new"方法之前
def new
@movies = Movie.new
end

在初始化出现之前它运行良好。它需要将参数传递给“new”方法,但这是在打开 View 以从用户传递参数并保存它们之后完成的。现在我无法打开该 View ,因为出现错误
wrong number of arguments (0 for 3)

添加构造函数是因为我开始为我的应用程序编写测试,并且为构造函数设置默认值将使该测试无效。关于解决这个问题的建议?

编辑:
我的测试如下所示:
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

没有那个构造函数,所有的测试都会失败......

最佳答案

ActiveModel 提供的默认构造函数非常好。如果删除您编写的构造函数,您应该能够像这样使用默认构造函数:

@movie = Movie.new(title: 'The Hobbit', director: 'Peter Jackson', studio: 'New Line Cinema')

当您不想提供三个参数时(例如在您的 new 操作中),您可以坚持使用 @movie = Movie.new

关于ruby-on-rails - rails将参数传递给 'new'方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14790310/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com