Лучший способ сделать это будет через ваши модели. Я предполагаю, что у вас есть модель под названием Org, а другая называется Department и что вы определили, что у нее много отношений между ними. Все, что вам тогда нужно сделать, это в вашей модели Org добавьте следующий код:
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.
EDIT:
Основываясь на своем развернутом вопрос, у вас есть поле отдела в модели орг, который вы хотите хранить и показывать как массив и редактировать, но в качестве простого текстового поля. Мои мысли по этому поводу заключались в том, что мне не нравится идея хранения данных отдела в области в org, это отношение от одного до многих, поэтому отдел должен быть отдельной моделью. Я бы удалил поле отдела из 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
Если вы все еще застряли у меня есть полный webiste на github, с которым вы можете ознакомиться. Для вас это организации и отделы, а на mysite это люди и навыки, люди и кредиты. Это ссылка:
https://github.com/davesexton/CKCASTING
Вы должны 'сериализации: отделы, Array' (http://stackoverflow.com/questions/4711334/string-to-serialized-array) – MrYoshiji
@MrYoshiji: Я редактировал мой вопрос. Не могли бы вы предложить какое-то дальнейшее решение? – sushilthe