从文本字段获取值并将其存储为数组
我的数据库中有一个文本字段,称为要存储部门列表的部门。用户将用逗号分隔输入部门的名称。例如:从文本字段获取值并将其存储为数组
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在更新时显示。
请帮忙。
做到这一点的最好方法是通过您的模型。我假设你有一个叫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,你可以查看。对你而言,这是组织和部门,而对于傀儡来说则是人员和技能或人员和信用。这是链接:
您应该'连载:部门,Array'(http://*.com/questions/4711334/string-to-serialized-array) – MrYoshiji
@MrYoshiji:我已经编辑我的问题。你能否提供一些进一步的解决方案? – sushilthe