0

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

在我的路线中,我有:

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

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

但是,当我尝试更新用户记录时,它会将我重定向回 /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

如何获取更新操作以重定向到用户的显示操作,但使用适当的链接 (/users/unique_identifier) 而不是 /users/ID?

4

2 回答 2

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

于 2012-05-04T22:16:05.077 回答
0

尝试这个

redirect_to user_path(@user.unique_identifer)

或者

redirect_to :action => :show, :unique_identifer => @user.unique_identifer
于 2012-05-04T18:07:46.720 回答