Ruby On Rails로 만든 웹 응용 프로그램이 있습니다. 지금은 객체를 표시하려고 할 때 다음 페이지에 액세스해야합니다. http://mywebapp.com/object/1234 1234 객체의 ID.url (레일의 루비)에서 ID를 어떻게 가리는 지
해당 개체 ID를 인코딩하고 다음 결과를 얻고 싶습니다. (예일뿐입니다).
어떻게 할 수 있습니까?
많은 감사,
마틴
Ruby On Rails로 만든 웹 응용 프로그램이 있습니다. 지금은 객체를 표시하려고 할 때 다음 페이지에 액세스해야합니다. http://mywebapp.com/object/1234 1234 객체의 ID.url (레일의 루비)에서 ID를 어떻게 가리는 지
해당 개체 ID를 인코딩하고 다음 결과를 얻고 싶습니다. (예일뿐입니다).
어떻게 할 수 있습니까?
많은 감사,
마틴
이러한 변환 방법은 모두 되돌릴 수 있으므로 개체에 어떤 이름이나 제목이 있거나 무엇이든간에 가장 좋은 방법은 슬러그를 추가하는 것입니다. 행동에 당신이 찾을 수 있기 때문에,
class MyObject
validates_format_of :slug, :with => /\A[a-z\-0-9]*\Z/
before_validation :generate_slug, :on => :create
def generate_slug
if self.slug.blank?
slug = self.name.mb_chars.downcase.normalize(:kd).to_s.gsub(/-/, " ").squeeze(" ")
slug = slug.gsub(/\s/, "-").gsub(/[^a-z\-0-9]/, "")
current = 1
self.slug = slug
while true
conflicts = MyObject.where("slug = ?", self.slug).count
if conflicts != 0
self.slug = "#{slug}-#{current}"
current += 1
else
break
end
end
end
end
end
은 다음 URL이 http://mywebapp.com/object/my_object_slug 될 수 있습니다 개체에 슬러그를하자 자동으로 개체 이름 (또는 뭔가 다른) 모델부터 값의 생성 : 이러한 경우에 새로운 속성을 추가 이 슬러그를 통해 객체 : URL을 길게
match "object/:slug", :to => "my_objects#some_action"
감사! 몇 분 후에 그걸 시험해보고 알려 드리겠습니다. – MartinMoizard
또한, 모델의': to_param' 메소드를 오버라이드하여 슬러그 값을 반환함으로써 리소스가 충분한 경로를 계속 사용할 수 있습니다. 그렇다면 레일즈는 "ID"대신에 그것을 사용할 것이지만 여전히'params' 해시에': id'를 전달할 것입니다. – Romain
https : // github.com/norman/friendly_id – lloydpick
신분증).
컨트롤러가 조금 같이해야이
class ThingsController < ApplicationController
require 'base64'
def show
@thing = Thing.find Base64.urlsafe_decode64(params[:id])
end
def edit
@thing = Thing.find Base64.urlsafe_decode64(params[:id])
end
#These are just a couple of very simple example actions
end
이제 실제로 약간 난이도가 될 것입니다 URL을 인코딩 - (이 흥미로운 문제처럼 보인다 나는 그것으로 볼 것이다하지만, 나는 어떤 약속도하지 않고있다.)
독서의 비트가 ActionView 개체의 ID를 얻기 위해 url_for의 to_param 방법을 사용하는 것을 알 수있다. 우리는 이것을 모델 자체에서 오버라이드하여 ID를 인코딩 할 수 있습니다.
class Thing < ActiveRecord::Base
def to_param
Base64.urlsafe_encode64 self.id.to_s
end
end
여기에 작성한 모든 내용은 추측입니다. 이전에이 작업을 수행하지 않았거나 코드를 테스트 했으므로 작동 여부 또는 예기치 않은 문제가 있는지 여부를 보증 할 수 없습니다. 나는 당신이 어떻게 가는지 듣는 것에 매우 흥미가있을 것입니다.
brad 감사합니다. 보기에 특별한 것이 있습니까? – MartinMoizard
:
가 routes.rb을 수정 잊지 마세요! 가역적 인 인코딩 스키마로 어떤 방식으로 객체의 ID를 가리고 싶다는 뜻입니까? – brad
@brad - 예 정확히 – MartinMoizard
@nurinur - 가장 오래된 질문의 사본으로 태그 붙여야 할 가장 오래된 질문입니까? 그건 말도 안돼. – MartinMoizard