做到這一點的最好方法是通過您的模型。我假設你有一個叫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
您應該'連載:部門,Array'(http://stackoverflow.com/questions/4711334/string-to-serialized-array) – MrYoshiji
@MrYoshiji:我已經編輯我的問題。你能否提供一些進一步的解決方案? – sushilthe