使用唯一用户标识符的Rails路由

时间:2012-05-04 18:05:18

标签: ruby-on-rails

当我在数据库中创建用户时,它还会创建一个唯一的标识符字符串。

在我的路线中,我有:

match '/users/:unique_identifer', :to => 'users#show'

这部分工作正常。当我转到/ users / xyz时,它会将我带到适当用户的show动作。

但是,当我尝试更新用户记录时,它会将我重定向回/ users / SOMENUMBER,其中SOMENUMBER是用户的ID。这会导致错误,因为控制器中的show动作具有:

def show
    @user = User.find_by_unique_identifier(params[:unique_identifer])
end

换句话说,show动作现在只按用户的唯一标识符而非用户ID查找用户。

更新操作如下:

def update
    @user = User.find_by_unique_identifier(params[:unique_identifer])
    if @user == current_user && @user.update_attributes(params[:user])
      redirect_to @user
    else
      redirect_to @user
    end
 end

如何让更新操作重定向到用户的show动作,但使用适当的链接(/ users / unique_identifier)而不是/ users / ID?

2 个答案:

答案 0 :(得分:2)

你应该重新定义to_param(和from_param以使生活更轻松),它用于生成对象的链接,默认情况下使用id字段

所以在你的情况下

class User < ActiveRecord::Base
  def to_param
    unique_identifer
  end
end

现在users_path(@user)应该给你/ users / your-uniq-identifier

这里有很好的描述和例子: http://apidock.com/rails/v3.1.0/ActiveRecord/Base/to_param

答案 1 :(得分:0)

试试这个

redirect_to user_path(@user.unique_identifer)

redirect_to :action => :show, :unique_identifer => @user.unique_identifer