根据字符串输入定义列

时间:2014-06-23 19:25:14

标签: ruby-on-rails ruby ruby-on-rails-4

我正在尝试遵循DRY原则并且发现自己想要在必须有一种方法将字符串指定为变量时重复代码。

我有一个基于语言的20多个属性的表。我目前正在if语句中分配它们。有没有办法将语言分配给字符串以在一个语句中引用?

if params[:word][:column_name] == "arabic"
  @word.arabic = params[:word][:translation]
end
if params[:word][:column_name] == "chinese"
  @word.chinese = params[:word][:translation]
end

1 个答案:

答案 0 :(得分:2)

你可以这样做。

@word.send(params[:word][:column_name] + '=', params[:word][:translation])

@word.send("#{params[:word][:column_name]}=", params[:word][:translation])

如果您不确定名称列是否存在,则可以执行

if @word.respond_to?(params[:word][:column_name])
  @word.send(params[:word][:column_name] + '=', params[:word][:translation])
end