1

我要去看看源代码,看看我是否能找到导致这种情况的原因,但这里的某个人可能以前遇到过这种情况,所以......我正在做一个正常的 form_for:

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

但它生成的 URL 是:

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

如果 id==13,它当然应该生成动作“/myobjs/13”。我已经验证了对象正确地返回了它的 id,当然 form_for 实际上是使用 id 适当地设置了表单的 id(如上所示),所以......我还不确定 form_for 使用什么来生成动作表单的 URL。有没有人遇到过这种情况并有解决方案?

提前致谢...

4

2 回答 2

0

您是否为模型设置了路线?

于 2010-02-22T23:32:47.873 回答
0

我只有在尝试为新对象制作表单时才发生这种情况,例如<% 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。ActiveRecord的to_param源码如下:

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

并且应该在您的情况下工作。

于 2010-02-23T01:16:33.360 回答