2015-03-02 47 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

相关问题