什么是将这些操作添加到控制器的RESTful和Rails方法

时间:2015-03-11 00:19:35

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

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

那个宝石没有添加控制器,但我想。我正在为我的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方法来执行此操作?

1 个答案:

答案 0 :(得分:0)

您可以使用单个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