我有一个项目创建表单,它创建了一个新项目,其中我将参数作为这3个属性的数组,我需要使用join方法转换为带有','的字符串,我是执行以下操作:
@project.trackers = @project.trackers.join(',') if !@project.trackers.nil?
@project.modules = @project.modules.join(',') if !@project.modules.nil?
@project.custom_fields = @project.custom_fields.join(',') if !@project.custom_fields.nil?
@project.repository = @project.repository.join(',') if !@project.repository.nil?
由于我对所有变量使用相同的逻辑,我想创建一个方法,它将传递一些参数并在一行中执行此操作。
任何好的建议都会非常有帮助。
尝试:
array = ['trackers','modules','custom_fields','repository']
joiner(array) #method call
def joiner(args)
args.each do |param|
if !param.nil?
@project.param = @project.param.join(',')
# Stuck how to convert param string
end
end
end
答案 0 :(得分:2)
拯救的元编程:
%w(trackers modules custom_fields repository).each do |field|
@project.send("#{field}=", @project.send(field.to_sym).join(',')) if @project.send(field.to_sym)
end
<强>更新强>
如果你想像专业人士那样解决这类问题,那就有一个very good book。
答案 1 :(得分:2)
%w[trackers modules custom_fields repository].each do
|param|
unless (a = @project.send(param)).nil?
@project.send("#{param}=", a.join(","))
end
end
如果您可以将值设为空字符串而不是nil
,那么
%w[trackers modules custom_fields repository]
.each{|param| @project.send("#{param}=", @project.send(param).to_a.join(","))}