2013-08-05 64 views
0

我的數據庫中有一個文本字段,稱爲要存儲部門列表的部門。用戶將用逗號分隔輸入部門的名稱。例如:從文本字段獲取值並將其存儲爲數組

department1, deaprtment2, department3 

我希望在用戶提交表單時將此值存儲爲數組。另外,我希望將部門列表顯示爲下拉列表。最後,在更新表格時,部門字段也應該像以前一樣可編輯(通過輸入以逗號分隔的文本進行更新)。

編輯: 我已經加入這個我的模型:

class Org < ActiveRecord::Base 
    serialize :department, Array 
    attr_accessible :name, :department 
    before_validation :update_department 
    validates :name, presence: true 
    def update_department 
    if department_changed? and department.is_a?(String) 
     self.department = self.department.split(',').collect(&:strip) 
    end 
    end 
end 

和視圖:

<%= f.text_area :department, :cols => "10", :rows => "10" %> 

現在每當我嘗試註冊時,該部門領域已經有[]目前,當我嘗試更新部門已經[「[部門1」,「部門2]」]。

我想在註冊時刪除[],並且只有department1,department2在更新時顯示。

請幫忙。

+1

您應該'連載:部門,Array'(http://stackoverflow.com/questions/4711334/string-to-serialized-array) – MrYoshiji

+0

@MrYoshiji:我已經編輯我的問題。你能否提供一些進一步的解決方案? – sushilthe

回答

1

做到這一點的最好方法是通過您的模型。我假設你有一個叫Org的模型,另一個叫Department,而你定義的這兩個模型有很多關係。然後,所有你需要做的就是在你的組織模型中添加以下代碼:

def department_list 
    departments.collect { |d| d.department_name }.join(', ') 
    end 

    def department_list=(text) 
    if id && text 
     departments.destroy_all 
     text.split(',').each do |d| 
     departments.create(department_name: d.strip.capitalize) 
     end 
    end 
    end 

然後在您的視圖中使用@ org.department_list添加一個文本框。編輯

:根據您的擴​​展問題

,你必須要存儲和顯示爲一個數組,但編輯作爲一個簡單的文本字段中的組織模型,部門領域。我的想法是,我不喜歡在org中將部門數據存儲爲字段的想法,這是一對多的關係,所以部門應該是一個單獨的模型。我會從組織中刪除部門字段。然後創建一個遷移來創建一個部門表。它應該是這個樣子:

class CreateDeparments < ActiveRecord::Migration 
    def change 
    create_table :departments do |t| 
     t.integer :org_id 
     t.string :department_name 

     t.timestamps 
    end 
    end 
end 

接下來在系車型添加這行代碼:

belongs_to :org 

在組織模型中添加以下內容:

has_many :departments, dependent: :destroy 

    def department_list 
    departments.collect { |d| d.department_name }.join(', ') 
    end 

    def department_list=(text) 
    if id && text 
     departments.destroy_all 
     text.split(',').each do |d| 
     departments.create(department_name: d.strip.capitalize) 
     end 
    end 
    end 

在你的控制器並意見您現在有以下內容:

@org = Org.first 
# List of departments as an array for a select 
@org.departments 
# A comma separated string for text boxes 
@org.department_list 

現在可以使用department_list方法在文本框中顯示列表,並且還可以使用該方法發佈並更改回來。所以,你的視圖代碼只是變成這樣:

<%= f.text_area :department_list, :cols => "10", :rows => "10" %> 

你可能會需要通過改變創造像這樣修改你的組織控制器:

def create 
    @org = Org.new(params[:org]) 

    respond_to do |format| 
     if @org.save 
     @org.department_list = params[:org][:department_list] 
     format.html { redirect_to org_url, 
         notice: "#{@org.name} was successfully created" } 
     format.json { render json: @org, 
         status: :created, location: @org } 
     else 
     format.html { render action: "new" } 
     format.json { render json: @org.errors, status: :unprocessable_entity } 
     end 
    end 
end 

如果仍然停留我有一個完整的github上的webiste,你可以查看。對你而言,這是組織和部門,而對於傀儡來說則是人員和技能或人員和信用。這是鏈接:

https://github.com/davesexton/CKCASTING

+0

其實我在我的模特里有部門領域叫做org。我應該修改什麼? – sushilthe

+0

已更新我的回答 –

+0

呈現註冊表單時出現以下錯誤:'未初始化的常量Org :: Department' – sushilthe

相關問題