2012-05-01 73 views

回答

7

find方法(當第一個參數不是符號時)通過主鍵查找。如果你想塞作爲主鍵,然後執行以下操作:

class User < ActiveRecord::Base 
    set_primary_key :slug 
end 

這樣做,發現將被塞串查找,並to_param將從塞返回字符串。你的路徑和url助手也應該使用slug。你的外鍵也必須使用slu。。但是,現在,找到將不是找到id。

如果你想在ID爲總是工作和/或不希望的行爲一切變化,但蛞蝓是用戶的備用搜索方法,然後通過下面的搜索:

User.find_by_slug('123-foobar') 

您的路線將會正常,但是如果slug位於:id所在的URL中,它將通過params [:id]傳遞給控制器​​。因此,您可以使用與slug和id相同的URL,控制器和操作,但您的控制器必須找出要搜索的內容。

class User < ActiveRecord::Base 
    def self.slug?(key) 
    /^\d*-./ =~ key 
    end 

    def self.find_from_key(key) 
    slug?(key) ? find_by_slug(key) : find(key) 
    end 
end 

class UsersController < ApplicationController 
    def edit 
    @user = find_from_key(params["id"]) 
    ...