2

これらの非常によく似たテキスト フィールドを簡潔な方法で更新するにはどうすればよいですか? 以下のテキスト フィールドの名前はそのままです。この質問のために編集していません。

  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

使用してみましsendto_symが、これまでのところ運がありません...

4

2 に答える 2

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
于 2012-07-21T17:56:08.153 に答える
0

最初にパラメーターをクリーンアップしてから、動的に属性を割り当てることを検討します。パラメータのラッパー クラスを使用すると、このコードの単体テストをより簡単に行うことができます。たぶん、これはあなたが始めるのに役立ちます.

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
于 2012-07-21T17:59:19.163 に答える