0

ユーザーがピンを作成できるレールアプリがあります。次に、それらのピンにコメントを付けることができます。私がすべきことは、ピン URL のコントローラー名を削除することです。

代わりに: http://localhost:3000/pins/name私はhttp://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 の次の行から発生します。

  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
4

2 に答える 2

0

あなたはおそらくphpのバックグラウンドかそのようなものから来たと思います.phpを自分で使用していたとき、私はそのように考えていましたが、RailsではURIに触れたり、解析しようとしたりしません。それがルーターの仕事であり、コードのその部分に到達した場合、仕事はすでに完了しています。

ピンの名前を URL として使用している場合は、 Friendly_id gem を使用するかto_param、モデルのメソッドを設定する必要があります。

ピンの id は、ルートで名前が付けられているため、常に にparams[:pin_id]あり、コメントの id は にありparams[:id]、ルートの変数名に注意してください

/:pin_id/comments/:id

リソースが何を意味するのかわかりませんが、モデル名を意味する場合は、ピンのコントローラーにいるので、ピンモデルであると想定しても安全ですが、コントローラーの名前が必要な場合は、アクセスできたparams[:controller]

すべてload_commentableを修正した後、メソッドはおそらく次のようになります

def load_commentable
  @commentable = Pin.find(params[:pin_id]).comments.where(id: params[:id])
end
于 2015-03-03T23:28:37.123 に答える