【Rails6】/:id以外のオリジナルURLでActive Adminを使うときのURLエラーを回避する方法

/:id以外のオリジナルURLでActive Adminを使うときのURLエラーを回避する方法

前提:【爆速】Rails6でURLを:idでは無くユーザー名に変更する方法

今回は、上記の方法でURLをオリジナルにしている前提のお話です。

例えば、 http://localhost:3000/articleshttp://localhost:3000/articles/url_test というURLで一覧ページと詳細ページ(URLを/:idではなく、/:オリジナルにした場合)があるとします。

その際に、GemのActive Adminを使用していると、一覧ページは表示されるのですが、「閲覧」「編集」「削除」の3つが使えなくなります。

理由としては、Active Adminの方のURLも http://localhost:3000/admin/articles/url_test というようにオリジナルのURLが反映されてしまうからです。

Active Adminでは、/:idのページでしか使えませんので、ここを変更する必要がありますね。

article.rb を編集

class Article < ApplicationRecord
  validates :original_url,
            uniqueness: true

  # def to_param
  #   return self.original_url
  # end
end

article.rbto_params をコメントアウトか削除します。

articles_controller.rb に移動

  private
  def to_param
    unless request.path.include?("admin")
      return self.original_url
    end
  end

コントローラに上記の記述を追加します。

そうすることで、アプリのviewでは、http://localhost:3000/articles/url_test と表示され、Active Admin側では、http://localhost:3000/admin/articles/1 と表示されるようになり、編集や削除などもできるようになります。

 

他にもこんな記事があります!