Ruby on rails 如何设置;“以编程方式”\&引用;迭代地;每个类对象属性都有一个值?
我正在使用RubyonRails3.0.9和RSpec2。我正试图通过以下方式重构一些规范文件(以便用更少的代码来测试类似的类对象属性值):Ruby on rails 如何设置;“以编程方式”\&引用;迭代地;每个类对象属性都有一个值?,ruby-on-rails,ruby,ruby-on-rails-3,rspec,rspec2,Ruby On Rails,Ruby,Ruby On Rails 3,Rspec,Rspec2,我正在使用RubyonRails3.0.9和RSpec2。我正试图通过以下方式重构一些规范文件(以便用更少的代码来测试类似的类对象属性值): [ :属性_a, :属性_b, :属性_c ].每个都有| 在做之前 #在这里,我想设置与 #类对象实例“attribute”(参见下面的 #更多信息)每次调用迭代器时(注意:all #由于这个原因,以下属性不可访问 #我在“before do”中使用“user.attribute” #(声明) # ##迭代1 #user.attribute_a='a_值
[
:属性_a,
:属性_b,
:属性_c
].每个都有|
在做之前
#在这里,我想设置与
#类对象实例“attribute”(参见下面的
#更多信息)每次调用迭代器时(注意:all
#由于这个原因,以下属性不可访问
#我在“before do”中使用“user.attribute”
#(声明)
#
##迭代1
#user.attribute_a='a_值'
##未更改“user.attribute_b”
##未更改“user.attribute_c”
#
##迭代2
##未更改“user.attribute_a”
#user.attribute_b='a_值'
##未更改“user.attribute_c”
#
##迭代3
##未更改“user.attribute_a”
##未更改“user.attribute_b”
#user.attribute_c='a_值'
#也许我应该做一些像下面这样的东西,但那也是
#由于必须使用“send”方法,因此不起作用(下面的代码行
#这只是我想做的一个例子)。
#
#user.send(:“#{attr}”)=“a#u值”
结束
...
结束
如何改进上述代码以实现我的目标(我指的是
用户发送(:“#{attr}”)='a_值'
部分,以便“以编程方式”设置-即,为每次迭代设置不同的属性值-每个用户属性值为'a_值'
)?您应该使用.send
并将=
附加到方法名称以调用setter,将值作为第二个参数传递给send
:
[
:attribute_a,
:attribute_b,
:attribute_c
].each do |attr|
before do
user.send("#{attr}=", 'a_value')
end
实际上,您正在这样做:
user.send('attribute_a=', 'a_value');
您的语法(user.send(:“#{attr}”)='a_值“
)错误/怪异,原因如下:
- 没有理由将
转换为字符串并立即返回到符号:attr
- 无法为
的返回值赋值。发送
.send
并将=
附加到方法名称以调用setter,将值作为第二个参数传递给send
:
[
:attribute_a,
:attribute_b,
:attribute_c
].each do |attr|
before do
user.send("#{attr}=", 'a_value')
end
实际上,您正在这样做:
user.send('attribute_a=', 'a_value');
您的语法(user.send(:“#{attr}”)='a_值“
)错误/怪异,原因如下:
- 没有理由将
转换为字符串并立即返回到符号:attr
- 无法为
的返回值赋值。发送