要在我的rails应用中显示用户,我使用to_param
方法中的用户名。
在控制器中,我正在使用:
User.find_by_username(params[:id])
路线如下:
match '/:id', to: "users#show"....
从今天起,我将其切换为
Controller
User.find_by(username: params[:username])
Routes.rb
match '/:username', to: 'users#show',
我的路线工作正常,但是当我尝试更新用户的设置时,它会重定向到root_url并且不会更改设置......
用户控制器更新操作
def update
@user = User.find_by(username: params[:username])
params[:user].delete(:password) if params[:user][:password].blank?
if @user.update_attributes(user_params)
flash[:success] = "Your account has been updated."
redirect_to edit_profile_path(@user)
else
render 'edit'
end
end
这个工作正常,直到我今天将其更改为find_by(username: params[:username])
我哪里出错?
更新
的routes.rb
resources :users
match '/:username', to: 'users#show', as: 'profile', via: 'get'
match '/:username/account', to: 'users#edit', via: 'get', as: 'edit_profile'
我假设我需要更改资源:用户使用用户名param代替:id ????
答案 0 :(得分:1)
更新操作需要:id参数。您可以通过执行$> rake routes | grep user
来检查这一点。
将此添加到您的路线:
put '/users/:username', to: 'users#update', as: :user