2011-04-07 45 views
0

使用Rails 2.3.8和friendly_id的關聯。在它的用戶名配置用戶的網址,但沒有模型

人模式:

class Person < ActiveRecord::Base 
    # Nice URL's in Rails. 
    def to_param 
    "#{login.downcase.gsub(/[^[:alnum:]]/,'-')}".gsub(/-{2,}/,'-') 
    end 
end 

人民控制器:

class PeopleController < ApplicationController 
    def show 
    @person = User.find(params[:id]) 

    if current_user == @person 
     @shops = @person.shops.paginate(:page => params[:page], :order => order) 
    else 
     @shops = @person.shops.by_status('published').paginate(:page => params[:page], :order => order) 
    end 

    end 

end 

用戶模型(剝離):

class User < ActiveRecord::Base 
    extend ActiveSupport::Memoizable 
    acts_as_authentic do |c| 
    c.validate_email_field = false 
    c.validate_login_field = false 
    end 

    attr_accessible :login, :email, :password, :password_confirmation, :name, :location, :website, 
        :allow_follower, :allow_message, :allow_updates, :allow_newsletter, :avatar, :role, :remember_me 

    # Returns name or login if name is blank 
    def full_name 
    if self.name.blank? 
     login.strip 
    else 
     (self.name || '').strip 
    end 
    end 
    memoize :full_name 

    # Nice URL's in Rails. 
    def to_param 
    "#{login.downcase.gsub(/[^[:alnum:]]/,'-')}".gsub(/-{2,}/,'-') 
    end 

end 

People.rbUser.rbto_param定義不起作用。

Users控制器的所有頁面純粹是爲了用戶的帳戶設置,是私人看法,所以我不需要任何漂亮的網址在裏面。但我創建了一個People控制器來顯示用戶的公共視圖。

people URL目前http://abc.com/people/1,我希望把它轉化爲http://abc.com/people/login-name-here,但沒有打破@person = User.find(params[:id])people的控制器,因爲我需要在它執行獅身人面像搜索。

我能做些什麼來實現呢?謝謝。

回答

0

希望這會幫助別人來這裏,如果你已經解決了這個。

它不應該打破User.find(params[:id]),如果使用friendly_id ..其實person/login-nameperson/123兩個工作路線。

由於您使用rails 2.3.8,您將需要使用friendly_id版本3.2.1.1是支持activerecord 2.3.x的最新版本 - (在此處找到https://rubygems.org/gems/friendly_id/versions/3.2.1.1)。 4.x版需要activerecord 3+,因此不兼容。

  • 首先,安裝gem(如果尚未完成),運行發電機等...(如果需要,可提供更多這方面的幫助)

在user表我建議您加入列(作爲一個字符串)

然後,緊接着...

只需添加以下app/models/user.rb

has_friendly_id :login, :use_slug => true, :cache_column => 'cached_slug' 

,你應該能夠擺脫你的模型to_param方法。 請記住更新attr_accessible以避免問題。

此外,您還可以創建一個返回一個字符串與friendly_id使用實例方法,如:

has_friendly_id :stripped_login, :use_slug => true, :cache_column => 'cached_slug' 

然後只需添加:

def stripped_login 
    login.gsub(/regexhere/) 
end 

FriendlyId downcases蛞蝓你。

注意:我記得在attr_accessible項目之前包含has_friendly_id存在問題。我幾乎可以肯定它需要放在那條線之後,但目前我似乎還沒有回憶。

相關問題