У меня есть ресурс с собственной ссылкой, Node
, настроенный так:
class Node < ApplicationRecord
belongs_to :parent, class_name: 'Node', foreign_key: 'node_id', optional: true
has_many :children, class_name: 'Node', foreign_key: 'node_id'
end
Он отлично работает на консоли, но я хочу иметь возможность перейти к узлу и создать оттуда дочерние узлы, и у меня возникают проблемы при этом.
Например, если я открою /nodes/1
, там должна быть форма, и каждый узел, который я создаю из этой формы, должен автоматически заполнить node_id
идентификатором текущего узла 1
.
Как мне настроить form_with
и nodes_controller
, чтобы это позволило мне достичь этого?
Самое близкое, что я получил, было создание специального метода (с соответствующим маршрутом):
def create_child
@node = Node.new(node_params)
@node.node_id = params[:id]
if @node.save
redirect_to node_path(params[:id])
end
end
private
def node_params
params.require(:node).permit(:name)
end
А затем настройте форму следующим образом:
<%= form_with url: "create_child" do |form| %>
<%= form.text_field :name %>
<%= form.submit %>
<% end %>
Запрос проходит, но затем я получаю эту ошибку:
ActionController::ParameterMissing (param is missing or the value is empty: node)
Но, насколько я могу судить, объект Node
должен был быть создан в методе create_child
.
Есть идеи?