做到这一点的最好方法是通过您的模型。我假设你有一个叫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