以下是我在users / edit.html / erb中的内容
<%= form_for(resource, :as => resource_name, :url => user_path(resource_name), :html => { :method => :put }) do |f| %>
我的用户路线:
edit_user GET /users/:id/edit(.:format) users#edit
user GET /users/:id(.:format) users#show
PUT /users/:id(.:format) users#update
method =&gt; put,所以使用路由信息,我希望HTML操作是/ users /:id
这是users / edit.html.erb,我希望来自id的HTML为edit_user_id,而class为edit_user
这是我在显示表单时实际使用HTML(使用firebug)获得的内容:
<form id="new_user" class="new_user" method="post" action="/users/user" accept-charset="UTF-8">
HTML不应该(假设用户ID为1):
<form id="edit_user_1" class="edit_user" method="post" action="/users/1" accept-charset="UTF-8">
在我的routes.rb文件中,我有:
resources :users, only: [:show, :edit, :update]
devise_for :users, :controllers => { :registrations => 'registrations', :confirmations => 'confirmations' }, :path => '', :path_names => { :sign_in => "login", :sign_up => "request_invite" }
我确实将用户帮助更改为:
def resource
@resource ||= User.find(params[:id])
end
所以,根据API文档,这也应该将/ users /:id作为一个动作,因此,HTML现在应该如下所示:
<form id="edit_user_1" class="edit_user" method="post" action="/users/1" accept-charset="UTF-8">
相反,它是:
<form id="edit_user" class="edit_user" method="post" action="/users/user" accept-charset="UTF-8">
因此,当用户控制器进入操作时,会触发以下代码:
def update
@user = User.find(params[:id])
并且它认为(从表单的动作),我传递的id是单词user,所以当我点击更新时我希望得到以下错误消息:
找不到ID = user
的用户这正是我得到的错误。任何额外的见解?
在users_helper.rb中:
def resource
@resource ||= User.find(params[:id])
end
并在users / edit.html.erb
中 resource_name,:html =&gt; {:method =&gt; :put})do | f | %GT;答案 0 :(得分:1)
简短回答是:它取决于您视图中资源的价值。
http://apidock.com/rails/v3.2.3/ActionView/Helpers/FormHelper/apply_form_for_options! 表单的id和类由dom_id和dom_class帮助程序生成,'action'前缀为'edit'而不是'new'当且仅当:
object.respond_to?(:persisted?) && object.persisted?
对于activerecord对象,当且仅当对象已保存到db时,此计算结果为true。