当我在数据库中创建用户时,它还会创建一个唯一的标识符字符串。
在我的路线中,我有:
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?
答案 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