从模型类传递options_for_select值

时间:2018-04-26 06:18:01

标签: ruby-on-rails ruby-on-rails-5

我在我的rails应用程序中有一个下拉列表。

= form_tag({:controller=>"r4c", :action=>"result"}, method: :get) do
 = label_tag(:q, "Trip Type: ")
 = select_tag(:q, options_for_select([["Single load completed trip", "r4c_001"]]), class:"select")
 = submit_tag("Get Test Details")

正如我们所看到的,我将值[[“Single ....]]值直接传递给options_for_select。我试图从另一个类中获取此值,说一个模型,我创建了一个模型类。

require 'active_record'
class R4cOptionsModel < ActiveRecord::Base
 def country_options
    return [["Single load completed trip", "r4c_001"]]
 end
end

和视图表单

= select_tag(:q, options_for_select(R4cOptionsModel.country_options), class:"select")

但是我收到一条错误消息

  

的未定义方法`country_options'

这样做的正确方法是什么。谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

您的方法country_options被定义为类R4cOptionsModel中的实例方法。因此,要么在视图中调用此类的对象:

= select_tag(:q, options_for_select(@r4c_option_model.country_options), class:"select")

或者,如果您的选项更加静态,请使用self将方法定义为类方法:

class R4cOptionsModel < ActiveRecord::Base
  def self.country_options
    [["Single load completed trip", "r4c_001"]]
  end
end

...并保持视图代码不变。

更新

在辅助方法中定义它(推荐)

如果仅在视图中需要这些选项值,请使用此方法。在ApplicationHelper或任何其他帮助程序模块中定义它。

module ApplicationHelper
  def country_options
    [["Single load completed trip", "r4c_001"]]
  end
end

和观点:

= select_tag(:q, options_for_select(country_options), class:"select")