使用用户名为to_param重定向到用户的个人资料路径

时间:2014-01-24 21:18:31

标签: ruby-on-rails ruby-on-rails-4

要在我的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 ????

1 个答案:

答案 0 :(得分:1)

更新操作需要:id参数。您可以通过执行$> rake routes | grep user来检查这一点。

将此添加到您的路线:

put '/users/:username', to: 'users#update', as: :user