设置包含select字段集合的simple_forms_for字段的最佳和正确方法是什么,但select中包含的值需要从与调用字段没有直接关联的模型中获取模型?
例如,我有一个simple_forms_for表单如下:
<%= simple_form_for(@customer) do |f| %>
<%= f.error_notification %>
<fieldset>
<div class="form-inputs">
<%= f.input :code, required: true %>
<%= f.input :name, required: true %>
<%= f.input :location, required: true %>
<%= f.input :service_level %>
<%= f.input :golive_date, :as => :date_picker %>
<%= f.input :connection_type %>
<%= f.input :service_centre %>
<%= f.input :end_date, :as => :date_picker %>
<%= f.input :sla %>
<%= f.input :project_code %>
</div>
<div class="form-actions">
<%= f.button :submit, :class => "btn btn-primary" %>
</div>
</fieldset>
<% end %>
我想让:service_level字段成为一个选择字段并向其添加一个集合,但是存储查找值的表与表单的Customer表没有关联。
class Lookup < ActiveRecord::Base
validates_presence_of :name, :description
has_many :lookup_values
accepts_nested_attributes_for :lookup_values, :reject_if => lambda { |a| a[:content].blank? }, :allow_destroy => true
end
class LookupValue < ActiveRecord::Base
belongs_to :lookup
end
class CreateLookups < ActiveRecord::Migration
def change
create_table :lookups do |t|
t.string :name
t.string :description
t.timestamps
end
end
end
class CreateLookupValues < ActiveRecord::Migration
def change
create_table :lookup_values do |t|
t.integer :lookup_id
t.string :name
t.string :value
t.timestamps
end
end
end
我基本上希望能够使用以下SQL查询填充select的值:
select v.name||' - '||v.value
from lookup_values v,
lookups l
where v.lookup_id = l.id
and l.name = 'Service level';
保存到:service_level字段的实际值必须是v.name的值。
我看到的所有集合示例似乎只显示了如何根据它们之间存在关联的模型创建选择,只是想知道是否有一种简单的方法可以在没有关联的情况下实现这一点。
答案 0 :(得分:0)
好的,这很令人尴尬......
简单的解决方案是修改_form.html.erb视图文件,以便:service_level字段显示为:
<%= f.input :service_level, :collection => LookupValue.joins(:lookup).where(lookups: { :name => 'Service level' }).pluck(:name) %>
在表单中重复多个查找值时,我可能需要更加干燥。
任何想法如何将此代码增强到: