在初始化具有散列类型结构的方法时,我遇到了关于何时/为什么或者是否只是偏好的问题。
class Person1
attr_reader :name, :age
def initialize(params)
@name = params[:name]
@age = params[:age]
end
end
me = Person1.new(name: 'John Doe', age: 27)
puts me.name
puts me.age
#----------------------------------------------
class Person2
attr_reader :name, :age
def initialize(name, age)
@name = name
@age = age
end
end
me = Person2.new('John Doe', 27)
puts me.name
puts me.age
#----------------------------------------------
class Person3
attr_reader :person
def initialize(name, age)
@person = { name: name,
age: age }
end
end
me = Person3.new('John Doe', 27)
puts me.person[:name]
puts me.person[:age]
如果这是一个偏好的问题,我喜欢只传递哈希,但如果你需要不同的attr阅读器,哈希本身的编写器,我可以看到这是一个问题。有经验法则吗?我看到很多使用params的rails文章。
答案 0 :(得分:1)
你的第三种方式很可能永远不会出现在野外 - 你已经构建了一个人物对象,为什么它有一个person
的存取器?属性应该在类本身上。 1和2之间的差异主要是偏好,但是当您经常想要仅设置特定属性时,第二个可能是有利的。
确认rails对params的使用:params是包含您正在处理的特定请求的请求参数的哈希。当你在rails中处理很多请求时,它会出现在每个控制器中,也可能出现在某些视图中。