2011-10-06 53 views
1

所以我遇到了在更新操作中没有params [:id]值的问题。在Rails 3中,id如何在更新语句中传递

我得到“找不到没有ID的菜单” - 它在表单元素中有一个id =“edit_menu_1”。

如果我运行类似物品的脚手架,这看起来好像它会被更新语句(即POST语句中没有id值)拾取。这是我应该寻找/调试的正确值吗?有没有一个标准的Rails调试技术,我可以为id值(比如正确的id的隐藏表单字段)?

THX

编辑#1 从development.log 脚手架(值id存在):

Parameters: {"utf8"=>"✓", "authenticity_token"=>"HfMoJHPC7oFFYDcmeHh4tVzlRtpreQTYT75L7TDZ3Qs=", "menu"=>{"content"=>"here is my menu - more things for you"}, "commit"=>"Update Menu", "id"=>"1"} 

我的应用(值没有id)

Parameters: {"utf8"=>"✓", "authenticity_token"=>"xr82q8+YSj7z1WorVedqUKzEYroycDslMgRqgZf5crQ=", "menu"=>{"name"=>"Bar Menu - some thigs"}, "commit"=>"Update Menu"} 

我的形式的代码是:

<%= form_for(@menu , :url => menus_save2_path) do |f| %> 
    <div><%=f.text_field :name %></div> 
  1. 我该如何强制ID值?
  2. 有意义,但是如果我查看脚手架代码,则没有隐藏参数的id值。这是自动完成的吗?
+3

显示一些代码... – lucapette

+0

你是否重写了通常的整数'id'字段来包含字符串呢?什么是'id =“edit_menu_1”' - 看起来像是html元素的id,而不是数据库表中的记录ID? – Zabba

+0

正确的,是'form'元素的ID,用于 – timpone

回答

1

params总是显示在log/development.log中,因此您应该看到提供请求时显示的参数。通常,URL中提供了:id参数,而不是HTML表单,并且由路由系统生成。您的参数可能不存在,因为您忘记将其包含在您的form_tagform_for呼叫的目标网址中。

+0

后添加的开发日志和form_for - 我认为我在模型传递方面做得正确。 thx – timpone

+0

'rake routes'中'menus_save2_path'的路由是什么?它可能需要一个参数,如'menus_save2_path(@menu)' – tadman

+1

是的,我认为你是对的 - 我刚开始重新使用rails默认的REST方法,并且正在工作......对此的解释是说实话,方式太冗长了。 – timpone

相关问题