Rails的新手..
我正在访问表单:/ users / 1 / edit(显示但不会更新并抛出错误)我还有一个设计表单:/ user / edit(显示和正确更新)
我使用的是Rails 4和Devise 3.1。
routes.rb中:
resources :users
devise_for :user, :controllers => { registrations: 'registrations' }
get 'users/:id' => 'users#show'
和我的可用路径:
users_path GET /users(.:format) users#index
POST /users(.:format) users#create
new_user_path GET /users/new(.:format) users#new
edit_user_path GET /users/:id/edit(.:format) users#edit
user_path GET /users/:id(.:format) users#show
PATCH /users/:id(.:format) users#update
PUT /users/:id(.:format) users#update
DELETE /users/:id(.:format) users#destroy
new_user_session_path GET /user/sign_in(.:format) devise/sessions#new
user_session_path POST /user/sign_in(.:format) devise/sessions#create
destroy_user_session_path DELETE /user/sign_out(.:format) devise/sessions#destroy
user_password_path POST /user/password(.:format) devise/passwords#create
new_user_password_path GET /user/password/new(.:format) devise/passwords#new
edit_user_password_path GET /user/password/edit(.:format) devise/passwords#edit
PATCH /user/password(.:format) devise/passwords#update
PUT /user/password(.:format) devise/passwords#update
cancel_user_registration_path GET /user/cancel(.:format) registrations#cancel
user_registration_path POST /user(.:format) registrations#create
new_user_registration_path GET /user/sign_up(.:format) registrations#new
edit_user_registration_path GET /user/edit(.:format) registrations#edit
PATCH /user(.:format) registrations#update
PUT /user(.:format) registrations#update
DELETE /user(.:format) registrations#destroy
GET /users/:id(.:format) users#show
users_controller.rb
def index
@users = User.all
end
def show
@user = User.find(params[:id])
end
def edit
end
def create
@user = User.create(user_params)
end
def destroy
end
private
def user_params
params.require(:user).permit(:avatar)
end
更新: 我找到了答案,因此删除了一些内容。
答案 0 :(得分:1)
我对您设置应用程序的方式感到有些困惑,但值得注意的是,我并不认为您的表单知道要更新的内容。试试这个:
<%= form_for @profile do |f| %>
...
然后,您需要更新用户控制器中的编辑操作:
def edit
user = User.find(params[:id])
@profile = user.profile
end
请注意,它听起来像个人资料是自己的类,属于用户,因为您的用户模型表明&#34; has_one:个人资料。&#34;但我不认为实际上是这样,如果不是,你应该从你的模型中删除那种语言。但如果是这种情况,您需要有一个配置文件控制器,它将具有类似的CRUD操作,其中应包括我上面描述的操作方法。
答案 1 :(得分:0)
您的Users
控制器需要update
操作
class UsersController < ApplicationController
...
def update
user = User.find(params[:id])
user.update(user_params)
end
end