Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何设置;“以编程方式”\&引用;迭代地;每个类对象属性都有一个值?_Ruby On Rails_Ruby_Ruby On Rails 3_Rspec_Rspec2 - Fatal编程技术网

Ruby on rails 如何设置;“以编程方式”\&引用;迭代地;每个类对象属性都有一个值?

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_值

我正在使用RubyonRails3.0.9和RSpec2。我正试图通过以下方式重构一些规范文件(以便用更少的代码来测试类似的类对象属性值):

[
:属性_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
    转换为字符串并立即返回到符号
  • 无法为
    的返回值赋值。发送