Я пытаюсь обновить массив, хранящийся в базе данных, однако действие обновления не работает. Массив не обновляется и не отображается ошибка. Другие параметры в форме корректно обновляются в базе данных.База данных Rails не обновляет массив в действии обновления
форма отправляет массив в качестве одного из параметров (в данном случае responses: []
):
"task"=> {"title"=>"tasko uno", "responses"=>["yes", "no", "maybe", "other"] ... }
Обновление действия:
def update
@task = Task.find(params[:id])
if @task.update(tasks_params)
redirect_to edit_task_path
else
render 'new'
end
end
В PARAMS разрешений:
private
def tasks_params
params.require(:task).permit(:title, :help, :task_type, :taskflow_id, :responses => [])
end
База данных - это поле sql-lite, а модель задачи - serialize :responses, Array
, массив столбцов имеет тип text
, с заголовком столбца responses
.
Любая помощь будет высоко оценена.
EDIT Миграция файл:
class CreateTasks < ActiveRecord::Migration
def change
create_table :tasks do |t|
t.string :title
t.integer :task_type
t.text :help
t.text :responses
t.belongs_to :taskflow
t.timestamps null: false
end
end
end
Обновление журнал сервер действий:
Started PATCH "/tasks/1" for 127.0.0.1 at 2016-06-28 12:37:12 +0100
Processing by TasksController#update as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"BL2fI3JDIGfTqWxQHInR/NFI6N/agETaUb97lAZ86PpNmpj1ofQ+TRkHZNdiISyOMlag3geleig6PsaqaWNr8Q==", "task"=>{"title"=>"tasko uno", "help"=>"some help text", "task_type"=>"2", "taskflow_id"=>"1"}, "responses"=>["test1", "test2"], "commit"=>"Update Task", "id"=>"1"}
Task Load (0.1ms) SELECT "tasks".* FROM "tasks" WHERE "tasks"."id" = ? LIMIT 1 [["id", 1]]
(0.0ms) begin transaction
(0.0ms) commit transaction
Taskflow Load (0.1ms) SELECT "taskflows".* FROM "taskflows" WHERE "taskflows"."id" = ? LIMIT 1 [["id", 1]]
Redirected to http://localhost:3000/taskflows/1/edit
Completed 302 Found in 3ms (ActiveRecord: 0.2ms)
Форма - Я пытаюсь иметь форму, добавляющие поля динамически:
<%= bootstrap_form_for @task do |f| %>
<%= f.text_field :title %>
<%= f.text_area :help %>
<%= f.text_field :task_type %>
<%= f.hidden_field :taskflow_id, value: @taskflow.id %>
<hr>
<p><strong>Responses</strong></p>
<div class="admin-task-responses">
<% if @task.responses %>
<% @task.responses.each do |r| %>
<%= render "tasks/task_response", {:res => r} %>
<% end %>
<% end %>
</div>
<div class="btn btn-primary add-response-btn">
<span class="glyphicon glyphicon-plus"></span> Add Response
</div>
<%= f.submit %>
<% end %>
Частичное:
<% if local_assigns.has_key? :res %>
<div class="task-response form-group">
<%= text_field_tag "responses[]", '', :class => 'form-control', :value => res %>
</div>
<% end %>
http://stackoverflow.com/questions/23340222/how-to-save-array-to-database-in-rails? –
@gen Спасибо, но я уже пробовал это - я использую 'serialize: response' в модели и проверил' response' множественное число. Это не ошибка, поэтому мне трудно найти, что происходит. – RobotEyes
Пожалуйста, добавьте свои журналы сервера для действия обновления. Вы знаете, как использовать pry? Вы должны проверить свой объект после обновления. –