2015-03-02 143 views
0

好吧,我有一個rails應用程序,用戶可以在其中創建引腳。然後他們可以評論這些引腳。我該做什麼是刪除引腳url中的控制器名稱。從url中刪除控制器名稱時出錯

所以不是:http://localhost:3000/pins/namehttp://localhost:3000/name

**我這樣做,在我的**的config/routes.rb中使用這個****

Rails.application.routes.draw do 

    resources :pins, :only => [:index, :new, :create], :path => '' do 
    resources :comments 
    member do 
    put 'upvote' 
    end 
    end 

但現在,當我嘗試評論一針我有這樣的錯誤:

wrong constant name 'pin name' 

,並從我comments_controller.rb此行FOM來的錯誤:

def load_commentable 
    resource, id = request.path.split('/')[1, 2] 
    @commentable = resource.singularize.classify.constantize.friendly.find(id) 
    end 

任何想法如何解決這個問題?

編輯:

**rake routes** output: 

pin_comments GET  /:pin_id/comments(.:format)   comments#index 
         POST  /:pin_id/comments(.:format)   comments#create 
     new_pin_comment GET  /:pin_id/comments/new(.:format)  comments#new 
     edit_pin_comment GET  /:pin_id/comments/:id/edit(.:format) comments#edit 
      pin_comment GET  /:pin_id/comments/:id(.:format)  comments#show 
         PATCH /:pin_id/comments/:id(.:format)  comments#update 
         PUT  /:pin_id/comments/:id(.:format)  comments#update 
         DELETE /:pin_id/comments/:id(.:format)  comments#destroy 
+0

您能否提供'錯誤的常數名稱'pin name''錯誤的所有回溯? – 2015-03-02 23:20:04

+2

+「rake routes」命令的輸出 – 2015-03-02 23:20:35

+0

您需要爲此添加自定義路由,但要小心限制一個有效的引腳名稱,否則將與其他路由發生衝突。 – tadman 2015-03-02 23:21:56

回答

0

使用params(散列與請求參數),而不是resource, id = request.path.split('/')[1, 2]。這應該解決你的第二個問題。

0

我想你可能來自於PHP背景或類似的東西,因爲我曾經認爲,那樣當我使用PHP我自己,但在鋼軌你不接觸的URI或嘗試解析它或任何東西,那就是路由器的工作,如果它到達了你的代碼的那部分,那麼這個工作已經完成了。

如果您使用pin的名稱作爲url,那麼您應該使用friendly_id gem,或者設置模型的to_param方法。

銷的ID將始終處於params[:pin_id]因爲這是它是如何在路線命名和註釋的ID將在params[:id],介意變量名的航線

/:pin_id/comments/:id 

我不確定這個資源是什麼意思,但是如果你是模型名稱,那麼你就是在一個pin的控制器中,所以假設它是一個pin模型是安全的,但是如果你想要控制器的名字,那麼你可以訪問params[:controller]

您的load_commentable方法可能看起來像這樣在修復所有內容後

def load_commentable 
    @commentable = Pin.find(params[:pin_id]).comments.where(id: params[:id]) 
end 
+0

你是絕對正確的。問題是這些線。我在我的控制器中進行了更改,現在評論抓住了friendly_id gem。謝謝。順便說一句,我得到它的工作沒有這部分.comments.where(id:params [:id]) - 這對我來說似乎是無用的,因爲rails會像大家所說的那樣爲大部分路由過程做好準備。 – zacchj 2015-03-03 23:37:34

相關問題