簡體   English   中英

Rails自定義路由不保留URL

[英]Rails custom routing not keeping URL's

我試圖將自定義路由添加到我的應用程序,但首先要保持簡單。

我希望以這樣的網址結尾:

/圖庫/節假日/美國/加利福尼亞

“假期”,“美國”和“加利福尼亞”分別是我的Collection模型的一個實例。

目前,我還沒有實現在URL中使用的標簽,因此目前該URL必須為:

/ gallery / 594/595/597

每個數字都是集合的ID。

現在,我將以下路由添加到路由文件中:

get '/gallery/*path' => 'Gallery#splitUrl'

並且相應的操作當前為:

  def splitUrl
    path_parts = params[:path].split('/')

    puts path_parts[1]

    # Deal with last item of the URL
    last_item = path_parts.last

    redirect_to Collection.find(last_item) if (Collection.find_by_id(last_item))
  end

我知道到目前為止它是基本的,但是只是從實現它開始。 它正在重定向到適當的集合。 在上面的代碼中,將我帶到ID為597的集合中,但是這樣做時,地址欄中的URL更改為/ collections / 597。 如何保持/ gallery / 594/595/597樣式?

在構建我的應用程序結束時,圖庫網址應類似於:

/畫廊/節假日/美國/加利福尼亞州/第1天

尚未決定是否將自己的照片單獨放在頁面上,但是如果我這樣做,則需要將其放在網址末尾。

我為畫廊提供了幾種模型:

收藏相冊照片尺寸

收藏集可以包含其他收藏集或相冊,但不能兩者都包含。

我認為我沒有以正確的方式來解決這個問題,但是卻看不出解決這個問題的正確方法是什么。

我也不希望/ collections / URL正常工作,因為我希望人們不得不使用完整的URL來訪問它們。

我嘗試告訴splitUrl方法呈現collection#show模板,並創建了它所需的實例變量,但是由於無法定位模板所包含的局部元素以及我的某些樣式基於模板,因此模板的呈現失敗在控制器名稱和操作上失敗,因為新的控制器和操作現在為gallery和splitUrl。

如果有人對如何解決這個問題有任何想法,那么我將不勝感激。

使用get '/gallery/:holiday/:country/:state =>'Gallery#splitUrl'

我認為您不需要使用redirect_to ,只需在splitUrl末尾調用一個方法來操作/渲染集合。

如果執行重定向,它將生成另一個發送到瀏覽器的URL,然后瀏覽器將要求您的服務器提供新的URL。 如果您的服務器重定向到相同的URL,這將產生一個無限循環。

請參閱http://api.rubyonrails.org/classes/ActionController/Redirecting.html#method-i-redirect_tohttp://en.wikipedia.org/wiki/HTTP_302中的更多內容


使用show方法編輯:

一種方法是您在show方法中管理集合,例如:

def show
  @collection = getCollection
  ...
end

def getCollection
  # find collection by id, if url is like /collection_id
  return Collection.find(param[:id]) if param[:id]

  # find collection with last id, if request is like /id1/id2/id3
  path_parts = params[:path].split('/')
  Collection.find(path_parts.last)
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM