2012-07-30 58 views
1

我正在使用ActiveAdmin並試圖做一個::select,:collection這不是一個多重選擇。ActiveAdmin表單不尊重:多個=> false

我的代碼是:

form do |f| 
    f.input :users, :as => :select, :input_html => { :size => 1}, :multiple => false, collection: User.where(role:1), include_blank: false 
end 

如果這是/admin/businesses.rb。這種關係是用戶和企業之間存在着危機。我嘗試重新排列我的選項,如github issue所示。我也看了一下similar stackoverflow question

然而,當我嘗試用:multiple => false,我得到生成此代碼:

<select id="business_user_ids" multiple="multiple" name="business[user_ids][]" size="1">  
<option value="4">Pilgrim</option> 
<option value="5" selected="selected">Mary</option> 
<option value="6" selected="selected">Bob</option> 
<option value="7">Billy</option> 
<option value="8">Ash</option></select> 

注意,有兩個選擇,以及對多種代碼設置爲multiple。任何人都知道這是爲什麼?

此外,我想弄清楚如何顯示另一個字段作爲可選項。

例如,我有f.inputs:users。有沒有一種方法可以重命名用戶顯示的內容?現在,它顯示users.name,但我想用users.email。

回答

2

我也碰到過這個問題。經過一段代碼追蹤之後,我發現它是底層Formtastic庫的二重奏。

Formtastic優先於現有的反射(has_many & has_and_belongs_to_many),而不是您傳入的選項來決定是否爲多重選項。

我認爲這是因爲強制單對多關係會導致一些混淆。就像你的數據一樣,已經有兩個選擇了,應該在嚴格的單選中顯示什麼?但是我可能會在稍後向Formtastic提出這個問題。

如果您還需要該功能,你可以只猴子通過將下面的代碼在配置打補丁/初始化/ formtastic.rb

module Formtastic 
    module Inputs 
    class SelectInput 
     def multiple_with_options_fix? 
     return false if options[:multiple] === false 
     multiple_without_options_fix? 
     end 

     alias_method_chain :multiple?, :options_fix 
    end 
    end 
end 

而對於第二個問題,你只需要添加以下代碼到你的模型中。

class User < ActiveRecord::Base 
    ..... 

    def to_label 
    self.email 
    end 
end 
+0

謝謝,工作像猴子補丁的魅力。我也會檢查一下to_label。有沒有辦法在運行中更改to_label?例如,如果一個表單我想呈現.name,但是在另一個表單上,我想將.email顯示爲to_label,那可能嗎? – LyricalPanda 2012-08-02 18:32:59

+0

根據http://rubydoc.info/gems/formtastic/2.0.0/Formtastic/Helpers/InputHelper 您可以傳遞輸入選項:member_label或:label_method for舊版本的Formtastic – StackNG 2012-08-03 03:16:51

0

我不確定是否正確理解您的問題。你想只改變輸入元素的標籤,還是想改變顯示的屬性的類型?如果它只是標籤值,那麼你可以使用

f.inputs:用戶:標籤=>「電子郵件」

我不認爲有任何干淨的方法來改變標籤在運行時。你可以通過檢查params散列中的'action'值來達到目的。因此,例如,當你顯示在新的行動這一觀點可以說

<% if params[:action]="new"%> 
f.inputs :users, :label=>"Email" 
<%else%> 
f.inputs :users, :label=>"Name" 
<%end%> 

希望它可以幫助

1

雖然formtastic忽略:多=>在選項哈希真實的,它不尊重它在input_html選項。給這個去吧:

f.input :users, :as => :select, :input_html => { :size => 1, :multiple => false }, :multiple => false, collection: User.where(role:1), include_blank: false