如何以较简洁的方式更新这些非常相似的文本字段?下面的文本字段被命名为给定 - 我没有为此问题编辑它们。
def update
company = Company.find(current_user.client_id)
company.text11 = params[:content][:text11][:value]
company.text12 = params[:content][:text12][:value]
company.text13 = params[:content][:text13][:value]
# etc
company.save!
render text: ""
end
我已尝试使用send
和to_sym
但到目前为止没有运气......
答案 0 :(得分:3)
[:text11, :text12, :text13].each do |s|
company.send("#{s}=".to_sym, params[:content][s][:value])
end
如果它们都是增量数字,那么:
11.upto(13).map{|n| "text#{n}".to_sym}.each do |s|
company.send("#{s}=".to_sym, params[:content][s][:value])
end
答案 1 :(得分:0)
我会考虑先清理参数,然后再动态分配属性。使用params的包装类可以让您更轻松地对此代码进行单元测试。也许这有助于你入门。
require 'ostruct'
class CompanyParamsWrapper
attr_accessor :text11, :text12, :text13
def initialize(params)
@content = params[:content]
content_struct = OpenStruct.new(@content)
self.text11 = content_struct.text11[:value]
self.text12 = content_struct.text12[:value]
self.text13 = content_struct.text13[:value]
end
end
# Company model
wrapper = CompanyParamsWrapper.new(params)
company.text11 = wrapper.text11
# now easier to use Object#send or other dynamic looping