- 下拉框的实现方式
由于设计方式的原因,所有的系统参数放入一张大表(sys_params)中。通过type_flag 来代表不同的参数类型。
比如
学校的类型 有8种。code 分别是 1-11 . type_flag 是 '000E'
学校类型 | string | 1.大学、2.中学、3.小学、4.幼儿园、5.党校、6.培训中心、7.特殊学校、8.研究所、9.业余学校、A.职校、B.其他 | 000E |
现在需要 维护一张学校信息表。在具体的一个学校的信息中,需要输入学校类别,在界面上需要 使用下拉框的方式来处理。
实现的步骤。
- 在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'
- 在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 %>
- 注意 collection: SysParam.all().where(:type_flag => '000E') 语句。只有这样,才会把 满足 条件的 (type_flag == '000E') 的条件显示在 下拉框中,否则是所有数据显示在下拉框中。
- :label_method => :display_school_lx_name 这个语句的左右,是定制显示 下拉框中显示的内容。在sys_param的model中这样定义。
def display_school_lx_name "#{code} - #{value}" end
- options 使用 select2 的可查询的下拉框组件。
http://ivaynberg.github.io/select2/index.html
- 使用 radio button 的方式的实现
<div class="btn-group span_left" data-toggle="buttons">
<%= 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 %>
</div>
其中 SysParam 不需要和 这个model进行关联。
其中:id 和 :name 是 SysParmas中的 字段名称。name是要显示在radio 上的文字。id 是 要传递和保存的 内容。
code 和 name 是SysParam 中的字段。