write_attribute適用例
プロジェクトにはこのような2つのニーズがあります.
1. フォームは1つのパラメータを表示して提出して、このパラメータの単位はMHZで、しかしプログラムの中で精度の要求は比較的に高いのはHZで、つまり保存する時10 e 5に乗って、フォームの表示の時、入力の時、すべてその6つのゼロを要りません.
2. 単位換算をサポートします.たとえば、1つのプロジェクトに料金オプションがあり、為替レートの状況に応じてドルまたはRMBが表示されます.明らかに、為替レートは変化しており、フォームの提出時には、ドルを入力する可能性があり、RMBを入力する可能性があります.これはユーザーの設定によって異なります.
私たちの使い方は次のとおりです.
モデルに追加する方法:
フォームでの変更方法は次のとおりです.
何もないように見えますが、controllerやviewerであまり修正しなくてもいいというメリットがあります.
それを為替レートで換算しないと、私は前に次のように処理します.
viewer:
Cotrollerではそれぞれ、作成と修正を2回処理します
1. フォームは1つのパラメータを表示して提出して、このパラメータの単位はMHZで、しかしプログラムの中で精度の要求は比較的に高いのはHZで、つまり保存する時10 e 5に乗って、フォームの表示の時、入力の時、すべてその6つのゼロを要りません.
2. 単位換算をサポートします.たとえば、1つのプロジェクトに料金オプションがあり、為替レートの状況に応じてドルまたはRMBが表示されます.明らかに、為替レートは変化しており、フォームの提出時には、ドルを入力する可能性があり、RMBを入力する可能性があります.これはユーザーの設定によって異なります.
私たちの使い方は次のとおりです.
モデルに追加する方法:
def noise_floor_high_disp=(x)
# nf_high
write_attribute(:nf_high,(x.to_f*1_000_000).to_i)
end
def noise_floor_high_disp()
if nf_high.nil?
return nil
else
return read_attribute(:nf_high)/1000000.0
end
end
フォームでの変更方法は次のとおりです.
<td><%= text_field 'analyzer', :noise_floor_high_disp, %></td>
何もないように見えますが、controllerやviewerであまり修正しなくてもいいというメリットがあります.
それを為替レートで換算しないと、私は前に次のように処理します.
viewer:
# , RMB
<%unit_diff=ConfigParam.find(67).val.to_i==1 ? @us : @rmb
att = @analyzer.attenuator.nil? ? nil : @analyzer.attenuator+unit_diff
%> #
<tr>
<td><label for="attenuation">Attenuation(<%=unit_diff==0 ? "RMB" : "$"%>)</label></td>
<td><%= text_field 'analyzer','attenuator',{:size=>3,:value=>att} %></td>
</tr>
Cotrollerではそれぞれ、作成と修正を2回処理します
def analyzer_create
if params[:analyzer][:site_id].to_i == 0
#else
# raise params[:analyzer].inspect()
end
@analyzer = Analyzer.new(params[:analyzer])
@site= Site.new(params[:site])
@analyzer.status = 10
if @analyzer.save
unit_diff=ConfigParam.find(67).val.to_i==1 ? -60 : 0
@analyzer.update_attributes(:attenuator=>"#{params[:analyzer][:attenuator].to_i+unit_diff}") unless params[:analyzer][:attenuator].nil? or params[:analyzer][:attenuator].blank?
@analyzer.update_attributes(:nf_low=>"#{params[:analyzer][:nf_low].to_i+unit_diff}") unless params[:analyzer][:nf_low].nil? or params[:analyzer][:nf_low].blank?
@analyzer.update_attributes(:nf_high=>"#{params[:analyzer][:nf_high].to_i+unit_diff}") unless params[:analyzer][:nf_high].nil? or params[:analyzer][:nf_high].blank?
def analyzer_update
@analyzer = Analyzer.find(params[:id])
@[email protected]
if @analyzer.site_id.to_i == 0
logger.debug("handling site");
site_id = Site.create_if_needed(params[:site][:name])
params[:analyzer][:site_id]=site_id
end
#make sure when user stop auto_connect. we can handle
if @analyzer.auto_mode !=3 and @analyzer.att_count < 9
@analyzer.update_attribute(:att_count,-1)
end
if @analyzer.update_attributes(params[:analyzer])
unit_diff=ConfigParam.find(67).val.to_i==1 ? -60 : 0
@analyzer.update_attributes(:attenuator=>"#{params[:analyzer][:attenuator].to_i+unit_diff}") unless params[:analyzer][:attenuator].nil? || params[:analyzer][:attenuator].blank?