2014-11-20 4 views
1

나는 분명히 뭔가 빠져있는 것처럼 느껴지지만, 누군가가 나를 빨리 도울 수 있기를 바랍니다.rails, friendly_id, 슬러그를 보여주지 않는 사용자 이름

Devise를 사용하여 내 사용자 모델에 friendly_id 슬러그를 만들려고합니다. 내 UserController에서

class User < ActiveRecord::Base 

    extend FriendlyId 
    friendly_id :username, use: [:slugged, :finders] 

    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

    validates :username, :uniqueness => {:case_sensitive => false}, 
    :format => { with: /\A[a-zA-Z0-9]+\Z/ } 

end 

: 여기 내 모델 내 브라우저에서 표시 방법을로드 할 때

class UsersController < ApplicationController 

def show 
    @user = User.find(params[:id]) 
end 

end 

, 여전히이 로컬 호스트 : 3000/사용자/3 - 그것은 표시되지 않습니다 강타. 내 포스트 모델에 동일한 코드가 있고 완벽하게 작동하기 때문에 모든 것이 작동한다는 것을 알고 있습니다. 작동하지 않는 User Validation/Devise에 누락 된 것이 있습니까?

도움을 주시면 감사하겠습니다.

답변

4

이유는 슬러그가 저장되지 않았습니다. friendly_id를 초기화하기 전에 저장된 레거시 레코드를 찾으려고합니다. 하지만 당신은 슬러그를 생성하고 자신의 기록에 친화적 인 ID를 생성 할 수 있습니다. 여기에 과정이 있습니다.

def should_generate_new_friendly_id? 
    new_record? || slug.nil? || slug.blank? # you can add more condition here 
end 

이 방법을 추가 한 후에 모든 레코드를 다시 저장하려고합니다. Friendly가 메소드를 호출하고 해당 블록 내부에 정의 된 조건과 일치 할 경우 슬러그를 업데이트합니다.

<%= link_to "USER", current_user %> 

또는

<%= link_to "USER", user_path(current_user.to_param) %> 

는 또한 사용자 이름이 공백이없는 확인하십시오 : 뷰 파일에서
User.find_each(&:save!) 

같은 URL을 작성합니다. 사용자 이름이 비어있을 수있는 경우 동적 메서드를 사용하여 조건부로 열을 설정하여 슬러그 생성에 사용할 수 있습니다. 나는 그것이 모두가되어야한다고 생각한다! 감사합니다.

+0

안녕하세요 Rubyrider - 답장을 보내 주셔서 감사합니다! 나는 당신이 제안한 것을 시도했지만 여전히 URL에 슬러그를 표시하지 않습니다. 사실, 나는 User 테이블에서 많은 것을 취했고 슬러그 컬럼은 채워져서 확실히 저장된다. 사실 URL에 슬러그를 입력하면 작동합니다. (예 : localhost : 3000/user/bobsmith) - 페이지에서 링크를 클릭 할 때만 ID가 계속 표시됩니다. 어떤 제안? – gitastic

+0

오, 그 때를 이해합니다. 그러면 URL을 어떻게 정의 할 수 있습니까? 예를 들어 줄 수 있습니까? 그래서 내가 도울 수 있니? 나는 네 문제를 이해한다고 생각해. – Rubyrider

+0

예, 고마워요! 내 쇼 방법보기에서 내 주요 사용자 링크 중 하나는 다음과 같습니다. <% = link_to "USER", user_path (current_user.id) %> -이 링크는 localhost : 3000/user/3에 있습니다. – gitastic