【问题标题】:What is the RESTful and Rails way to add these actions to my controller将这些操作添加到我的控制器的 RESTful 和 Rails 方式是什么
【发布时间】:2015-05-12 15:25:03
【问题描述】:

我正在通过acts_as_taggable_on 向我的应用程序添加标记功能。

那个 gem 没有添加控制器,但我想添加。我正在将标记功能添加到我的 Node 模型中。

在我的NodeController 上,我知道我可以简单地添加这样的显式操作:

  def add_tagged_user

  end

  def remove_tagged_user

  end

  def tagged_users

  end

但这并不会让人感觉很平静或 Railsy。

相应的路线如下所示:

resources :nodes do
   match :add_tagged_user, via: [:post], on: :member
   match :remove_tagged_user, via: [:delete], on: :member
   match :tagged_users, via: [:get], on: :member
end

是否有 RESTful 或更 Railsy 的方式来执行此操作?

【问题讨论】:

    标签: ruby-on-rails rest ruby-on-rails-4 routing


    【解决方案1】:

    您可以使用单个 TagsController,其路由与 RESTful 资源匹配。

    类似

    路线

    # routes.rb
    resources :nodes do
      resources :tags, only: [:show, :create, :update]
    end
    resources :other_resources do
      resources :tags, only: [:show, :create, :update]
    end
    

    控制器

    class TagsController < ApplicationController
      before_action :load_taggable
    
      def create
        @taggable.tags.create(tag_params)
      end
    
      private
    
      def load_taggable
        # switches on params
        @taggable = if params[:node_id]
          Node.find(params[:node_id]
        elsif # other things that are taggable
          # OtherThing.find(...)
        end
      end
    end
    

    【讨论】:

    • 这让我感到困惑。我希望有更简单的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    • 2020-10-17
    • 2018-10-24
    相关资源
    最近更新 更多