我需要提供一个没有AR模型支持的表单。 (我知道这个问题已经以各种方式被问了几十次,但尽管大量阅读了实验,但我仍然无法做到。)RoR:使用没有AR模型的form_tag
描述我需要的最简单的方法是通过逆向工程:假设我想要一个带有“用户名”字段和“访问码”字段的表单。然后我想[提交]按钮调:
ServicesController#update
与params哈希表设置为(至少):
params={"service"=>{"credentials"=>{"username"=>"fred", "accesscode"=>"1234"}}, "commit"=>"update credentials", "action"=>"update", "controller"=>"services", "id"=>"54"}
或者只是
params={"credentials"=>{"username"=>"fred", "accesscode"=>"1234"}, "commit"=>"update credentials", "action"=>"update", "controller"=>"services", "id"=>"54"}
,其中 '54'是我想要更新的服务对象的ID。 (我的update()方法会将凭证从params散列中取出并与它们一起做正确的事情。)(我没有显示路由,但我不确定这与此有关。)
但是我还没有想出如何获得form_tag或form_for来开始我的投标。建议?
更新 根据下面的光圈建议,form_tag似乎是正确的。我收到路由错误'没有路由匹配“/ services/54”'。我去改变我目前的路线之前,我目前有:
resources :premises, :shallow => true do
resources :services
end
这给了我(部分):
edit_service GET /services/:id/edit(.:format) {:action=>"edit", :controller=>"services"}
service GET /services/:id(.:format) {:action=>"show", :controller=>"services"}
PUT /services/:id(.:format) {:action=>"update", :controller=>"services"}
DELETE /services/:id(.:format) {:action=>"destroy", :controller=>"services"}
@aperture:也许关闭。例如,form_for产生了“未定义的方法'merge:for userid:Symbol”错误。我发现text_field()需要一个散列作为其第三个参数(或者第二个,当你通过form.text_field()调用它时) - 是你想要的吗? – 2011-03-01 22:18:41
@aperture:我应该提到Service *是一个完整的ActiveRecord模型。这里的练习是创建一个表单来编辑/更新与Service相关的辅助数据*,而不是模型本身的一部分。 – 2011-03-01 22:26:28
应该是form_tag,我的错误。检查上面的编辑 – aperture 2011-03-01 22:41:57