Rails form_for помещает ссылку / адрес объекта в URL вместо id - PullRequest
1 голос
/ 23 февраля 2010

Я собираюсь уйти и посмотреть на источник, чтобы посмотреть, смогу ли я найти причину, но кто-то здесь, вероятно, сталкивался с этим раньше, так что ... Я делаю обычную форму form_for:

<% form_for(@myobj) do |f| %>

Но генерируемый URL:

form action="/myobjs/%23%3CMyobj:0x105f03ec0%3E" class="edit_myobj" id="edit_myobj_13" method="post">

Когда оно, конечно, должно генерировать действие "/ myobjs / 13", если id == 13. Я проверил, что объект возвращает свой идентификатор правильно, и, конечно, form_for фактически устанавливает идентификатор формы соответствующим образом, используя идентификатор (как показано выше), так что ... Я пока не уверен, что form_for использует для генерации действия URL для формы. Кто-нибудь сталкивался с этим раньше и нашел решение?

Заранее спасибо ...

Ответы [ 2 ]

0 голосов
/ 23 февраля 2010

Это случалось только при попытке создать форму для нового объекта, например <% form_for(Widget.new) do |f| %>. Попробуйте переопределить метод to_param в вашей модели, чтобы узнать, сможете ли вы узнать, что происходит.

def to_param
  (id = self.id) ? id.to_s : 'NO ID FOUND! Dig for bugs!'
end

Поскольку вы не наследуете от ActiveRecord :: Base, вам придется реализовать to_param самостоятельно. Исходный код для to_param ActiveRecord выглядит следующим образом:

def to_param
  # We can't use alias_method here, because method 'id' optimizes itself on the fly.
  (id = self.id) ? id.to_s : nil # Be sure to stringify the id for routes
end

И должен работать в вашей ситуации.

0 голосов
/ 23 февраля 2010

Есть ли у вас настройки маршрутов для модели?

...