У меня есть самореферентная модель Post для вложенных цепочек. Родительский пост отображает дочерние сообщения с частицами _post и _form. Каждый пост имеет типичные грубые действия для «ответа», «редактирования» и «удаления».UrlGenerationError в самонаводящейся модели
Задача: Действия редактирования дочерних ответов вызывают ошибку «UrlGenerationError Missing Required Keys [: id]», хотя параметр ID присутствует в запросе. Однако действие удаления работает нормально, и все действия отлично работают в родительском сообщении.
post.rb:
has_many :child_posts, class_name: "Post", foreign_key: "parent_post_id"
belongs_to :parent_post, class_name: "Post", optional: true
routes.rb:
resources :posts
_post.html.erb:
<%= link_to 'Edit', edit_post_path(post.id), ... %>
_form.html.erb: (Ошибка возникает на <%= form_for post do |f| %>
тег)
<% puts params.inspect # -> <ActionController::Parameters {"controller"=>"posts", "action"=>"edit", "id"=>"123"} permitted: false> %>
<%= form_for post do |f| %>
...
Днем, чтобы показать больше -. Это только кажется наиболее уместным. Мысли?
Входящие параметры и URL-адрес формы не имеют ничего общего друг с другом. Вы неправильно рассматриваете проблему. Реальная проблема заключается в том, почему хелпер маршрута терпит неудачу. Что проверяет «сообщение»? Вы переопределяете 'to_param' в своей модели. Что говорит 'polymorphic_url (post)'? – max
Я предполагаю, что наиболее вероятная причина - это всего лишь типографская ошибка. Возможно, вы должны использовать переменную экземпляра '@ post', а не локальную переменную' post'. – max
polymorphic_url (post) обнаруживает ту же ошибку, но это побудило меня осознать, что это связано с конфликтом, который я представил с помощью has_permalink gem, пытаясь поддерживать как постоянные ссылки (для оригинальных сообщений), так и номера идентификаторов (для ответов). Очевидно, я должен думать о лучшем решении. –