在rails中实现下拉框 和 radio button 显示大系统表的 处理方式

  • 下拉框的实现方式

由于设计方式的原因,所有的系统参数放入一张大表(sys_params)中。通过type_flag 来代表不同的参数类型。

比如 

学校的类型 有8种。code 分别是 1-11 . type_flag 是 '000E'

学校类型 string 1.大学、2.中学、3.小学、4.幼儿园、5.党校、6.培训中心、7.特殊学校、8.研究所、9.业余学校、A.职校、B.其他 000E


现在需要 维护一张学校信息表。在具体的一个学校的信息中,需要输入学校类别,在界面上需要 使用下拉框的方式来处理。

实现的步骤。

  1.  在schoole.rb model文件中 ,加入belongs_to .

    belongs_to :sys_param, -> { where type_flag: '000E' }, :foreign_key => :lx ,:primary_key => :id

    表示的含义是 外键是 lx(类型),对应的是 sys_param中的 id .其中需要满足的条件 是 type_flag = '000E'

  2. 在show.html.erb中 使用simple_form 中的 association 来处理成 下拉框

    <%= f.association :sys_param, collection: SysParam.all().where(:type_flag => '000E'), :input_html => { :class => 'span3 chzn-select'}, :label => GisSchool.human_attribute_name(:lx), :label_method =>  :display_school_lx_name  %>


  3. 注意  collection: SysParam.all().where(:type_flag => '000E') 语句。只有这样,才会把 满足 条件的 (type_flag == '000E') 的条件显示在 下拉框中,否则是所有数据显示在下拉框中。
  4. :label_method =>  :display_school_lx_name 这个语句的左右,是定制显示 下拉框中显示的内容。在sys_param的model中这样定义。

    def display_school_lx_name
       "#{code} - #{value}"
    end

  5. options       使用 select2 的可查询的下拉框组件。

    http://ivaynberg.github.io/select2/index.html

  • 使用 radio button 的方式的实现 

          
<%= f.collection_radio_buttons :tqn, SysParam.all().where(:type_flag => '0009'), :id, :name, { item_wrapper_tag: false } do |b| %> <%= b.label(:class => 'btn btn-primary'){ b.radio_button + b.text } %> <% end %>

其中 SysParam 不需要和 这个model进行关联。
其中:id 和 :name 是 SysParmas中的 字段名称。name是要显示在radio 上的文字。id 是 要传递和保存的 内容。

code 和 name 是SysParam 中的字段。

你可能感兴趣的:(ruby,&,rails)