ruby中helper方法的条件值

时间:2015-09-15 21:40:22

标签: ruby-on-rails ruby

我想在这个辅助方法中设置一个参数,但我不确定是否可以使用三元运算符或某些东西来设置某个条件的值。

<%= number_field_tag 'somearray[][somefield]', nil, {min: 0.000, step: 0.001, class: "form-control", :'aria-label' => "Quantity" ,onchange: "change_total(this)",value: 'VALUE SHOULD BE HERE'} %>

条件是这样的:

if params['somearray'].nil? != true
   return params['somearray'].first["quantity"]
else
   return nil
end

2 个答案:

答案 0 :(得分:2)

number_field_tag的第二个参数实际上是值,所以你当然可以用三元运算符(我根据nil是假的)简化了它:

number_field_tag 'somearray[][somefield]', (params[:somearray] ? params[:somearray][0][:quantity] : nil), min: 0.000, step: 0.001, class: "form-control", :'aria-label' => "Quantity", onchange: "change_total(this)"

但是,复杂的内联视图操作最好重构为辅助文件。帮助程序文件在app / helpers目录中定义,并根据控制器命名:如果您有PagesController,则需要将该方法添加到app / helpers / pages_helper.rb中的module PagesHelper(请注意,即使不将其传入,也可以从帮助文件访问params方法:

def somearray_value
  params[:somearray] ? params[:somearray][0][:quantity] : nil
end

然后你可以在视图中调用它:

number_field_tag 'somearray[][somefield]', somearray_value, min: 0.000, step: 0.001, class: "form-control", :'aria-label' => "Quantity", onchange: "change_total(this)"

答案 1 :(得分:0)

您可以使用try

<%= number_field_tag 'somearray[][somefield]', params[:somearray].try(:first).try(:fetch, :quantity), {min: 0.000, step: 0.001, class: "form-control", :'aria-label' => "Quantity" ,onchange: "change_total(this)" %>