2014-09-03 125 views
0

什麼是建立一個包含一個選擇字段的集合,但值包含在選擇需要被從沒有一個模型採購最好的,正確的方式simple_forms_for場與調用字段模型的直接關聯?Rails的無關聯創建集合

比如我有一個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字段中的選定字段並添加一個集合到它,但是存儲查找值的表沒有關聯與表格的客戶表。

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 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

好吧,嗯,這是尷尬...

簡單的解決辦法是修改_form.html.erb視圖文件,以便:service_level場原文:

<%= f.input :service_level, :collection => LookupValue.joins(:lookup).where(lookups: { :name => 'Service level' }).pluck(:name) %> 

我可能需要重複的形式多次查找值時,使這更幹。

任何想法如何,我可以增強該代碼:

  • 刪除在選擇字段中列出下拉空白值?
  • 修改,在選擇下拉顯示下拉至 名稱值文本||」 - '||值。例如示出的值的格式 「L1 - 第1級」。選擇並保存需要 的實際值保持爲「L1」(即:名稱值)
+0

好簡單的谷歌搜索回答第一個問題,只是需要加入:include_blank =>假輸入字段。 – shwashbuckle 2014-09-06 10:58:41