Ruby将部分args传递给默认值

时间:2015-06-25 06:30:07

标签: ruby rspec capybara

我是Capybara的新手,rspec& Ruby,我有一个填写表单的函数:

def form_fill(name:'James', age:'25', pets:'cat')
    fill_in 'Name', with: name
    fill_in 'Age' , with: age
    fill_in 'Pets', with: pets
end

我想知道该功能要改变什么,所以我可以修改表格(我已经填写),再次使用相同的功能。

例如: 我做了form_fill(name:'Bob'),现在我的表格是:

Name   Age    Pets
----   ----   ----
Bob    25     cats

稍后我想更改相同的已保存表单,并且仅通过仅使用age:form_fill(age:45)的参数调用相同的函数来更改年龄。

此时将使用默认值将表单更改为:

Name   Age    Pets
----   ----   ----
James  45     cats

所以我想知道如何实现与填充物相同的功能。同时修饰语。

1 个答案:

答案 0 :(得分:3)

看起来你只需要在这里使用Plain Old Ruby Object类。首先,我将创建一个Person类,用于设置有关人的属性。

class Person
  attr_accessor :name, :age, :pets

  def initialize(name: "James", age: 45, pets: "cat")
    @name = name
    @age = age
    @pets = pets
  end
end

这将允许您执行以下操作:

person = Person.new(name: "Bob")
=> #<Person:0x007fac4bb27128 @age=45, @name="Bob", @pets="cat">

然后在Capybara方法中这样做:

def form_fill(person)
  fill_in 'Name', with: person.name
  fill_in 'Age' , with: person.age
  fill_in 'Pets', with: person.pets
end

如果您想修改此人:

person.age = 25
form_fill(person)

希望这有帮助!