私は先進的な関係(habtm/hm/hmtなど..)を持つ多くのリソースを持っていますが、今はこのAPIのための美しいルーティングを書く時間です。 問題は、私はここで、RO私のルーティングを行うネストされたリソース+高度の関係についてのベストプラクティスをフィンすることはできません私がしようとしているものです。ここでRails 5先進的な関係を持つRESTful API
は、当該関係
# app/models/candidate.rb
class Candidate < ApplicationRecord
include Sociable, Locatable
belongs_to :user
has_many :sourcing_accounts
has_many :accounts, through: :sourcing_accounts
has_many :users, through: :sourcing_accounts
end
# app/models/sourcing_account.rb
class SourcingAccount < ApplicationRecord
belongs_to :account
belongs_to :candidate
belongs_to :user
end
# app/models/user.rb
class User < ApplicationRecord
include Sociable
has_many :candidates
has_many :campaigns
has_many :sourcing_account
end
と私のモデルです
この例では、SourcingAccount
を作成してCandidate
とUser
の間の関係を作成することを許可します。
resources :candidates do
resources :accounts
resources :users, only: [:index] do
post :remove
post :add
end
end
それは生成します。私はこのことについては何も見つからなかった
v1_candidate_user_remove POST /v1/candidates/:candidate_id/users/:user_id/remove(.:format) api/v1/users#remove {:subdomain=>"api", :format=>:json}
v1_candidate_user_add POST /v1/candidates/:candidate_id/users/:user_id/add(.:format) api/v1/users#add {:subdomain=>"api", :format=>:json}
。ベストプラクティスはありますか? そうでない場合は、このケースではどのようになると思いますか?
精度がなければ、Railsはこれをユーザー#removeとusers#addにルーティングしたいと考えていますが、これは全く間違っていると思います。これらのアクションは、ユーザーコントローラに属していてはいけません。
ボーナス:
何が(存在の検証と)2つの他のモデル2つの機種がSource
であり、もう一つは多型[Candidate,User] # for example
、(彼らはSociable
モデルである)であるに属するAccount
を作成するために、多型の経路のようになります。
、 update)は、追加の動詞で拡張することができますが、 'add'や' remove'や 'def things'でリストやネストされたリソースのような同義語を使用している場合は、あなたはそれを誤解している。 – max
あなたの明確な説明をお寄せいただきありがとうございます。最後の例では、2つのコンテキスト(モデルは2つのモデルに属します)で作成アクションをどのようにラップしますか?私のポストのボーナス問題のように。 2人の親が同時に存在する必要があるときに関係オブジェクトを作成する方法 –
あなたはしません。最も重要なモデルをコンテキストとして使用し、他の関係をパラメータとして渡します。 – max