Я хочу обновить существующее название и описание. Мои элементы вызываются todo, а база данных - todos (поскольку я генерирую с помощью commant comm). Код, который я имею edit.html.erb:Ruby on Rails путь понимания
<%= form_for :session, url: todos_path(@todo), method: :patch do |f| %>
<%= f.label :title %>
<%= f.text_field :title %>
<%= f.label :description %>
<%= f.text_field :description %>
<br />
<%= f.submit "Create" %>
<% end %>
routes.rb:
get "/todos", to: "todos#index"
get "/todos/new", to: "todos#new"
post "/todos", to: "todos#create"
delete "/todos/delete" , to: "todos#delete"
get "/todos/three", to: "todos#three"
post "/todos/edit", to: "todos#edit"
patch "/todos/edit", to: "todos#update"
# You can have the root of your site routed with "root"
root 'todos#index'
и, наконец, контроллер:
def edit
@todo = Todo.find_by_id(params[:id])
end
def update
todo = Todo.find_by_id(params[:session][:id])
todo.update(:description,params[:session][:description])
end
Моей проблема: я пришел с индексной страницы с идентификатором, и функция редактирования отобразит мне элемент, который я хочу, затем я хочу обновить поле названия и описания и нажать кнопку f.submit, чтобы обновить его. Моя проблема в том, что параметры не появляются, я получаю todos.2 (что, я думаю, это размер этого: session hash?). Я не использую <% = button_to%> так как я видел, что это не нужно во всех учебниках. Мой вопрос: где моя ошибка, почему параметры не поступают?
, да, я планирую придерживаться конвенции. Однако, чтобы понять, как они работают, я считаю, что сначала должен сделать свой собственный (я, очевидно, новичок). Я получаю сообщение об ошибке с вашим кодом неопределенной локальной переменной или методом update_todo –
@LucianTarna: К сожалению, это была опечатка. Отсутствует ':' в 'update_todo'. Исправлено сейчас, оно должно работать. – Surya
Да, я видел. Проблема в том, что он не получит todo.update_attributes (params [: session] .slice (: description)). ActiveModel :: ForbiddenAttributesError. –