Rails form_for将对象引用/地址放入URL而不是id

时间:2010-02-22 22:40:18

标签: ruby-on-rails form-for

我要去看看来源,看看我是否能找到造成这种情况的原因,但是有人在这之前可能会遇到这种情况......我正在做一个正常的形式:

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

但它产生的网址是:

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。之前的任何人都遇到过这个并且有解决方案吗?

提前致谢...

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我在尝试为新对象制作表单时遇到过这种情况,例如<% form_for(Widget.new) do |f| %>。尝试覆盖模型中的to_param method,看看是否可以找出正在发生的事情。

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

并且应该适合你的情况。