我有一个表单可以处理同一表单的四种不同类型的构面。在我的SQL专栏中,我有四个不同的属性。
其中只有一个会有数据。
Distribution =>
zip_code: nil
me_topic: nil
sex: nil
age: nil
为了区分它们,我想设置一个case语句,并在create call中添加 dynamic 属性:
@type = case params[:type]
when "zip" then ":zip_code"
when "interest" then ":me_topic"
when "sex" then ":sex"
when "age" then ":age"
end
@cur_item = Distribution.new(@type => params[:value])
# Unfortunately, this is not the proper way to create a dynamic attribute
@distribution = @email.distributions.create(params[:distributions])
完成此声明的正确语法是什么?
答案 0 :(得分:1)
声明一个名为type_map
def type_map params
@@type_map ||= {
"zip" => :zip_code,
"interest" => :me_topic,
"sex" => :sex,
"age" => :age
}
{ @@type_map[params[:type]] => params[:value]
end
现在您可以按如下方式使用地图:
@distribution = @email.distributions.create(type_map(params))
答案 1 :(得分:0)
这就是我的目的,但我可以随心所欲地回答。
@cur_item = case params[:type]
when "zip" then {:zip_code => params[:value]}
when "interest" then {:me_topic => params[:value]}
when "sex" then {:sex => params[:value]}
when "age" then {:age => params[:value]}
end
@distribution = @email.distributions.create(@cur_item)
答案 2 :(得分:0)
嗯,改善代码的一种方法(你在答案中发布的内容)是将重复的params[:value]
分解为如下:
key = case params[:type]
when "zip" then :zip_code
when "interest" then :me_topic
when "sex" then :sex
when "age" then :age
end
@cur_item = { key => params[:value] }
@distribution = @email.distributions.create @cur_item