Ruby on Railsにおける多型モデル資源ファインダ
4883 ワード
Railsモデルで多型性の関連付けを行う場合、 URLを生成する コントローラの親モデルを見つける モデル構造の下を見てください.これらの質問にレールの方法に答えましょう.
画像URLの生成
Errorは、多型URLを生成する簡単な方法を提供します.polymorphic_path
So
コントローラの親モデルの検索
イメージコントローラでは、関連するデータをスコープするために親情報が必要です
ハッピーハッキング!
class Company < ActiveRecord::Base
has_many :images
end
class Product < ActiveRecord::Base
has_many :images
end
class Image < ActiveRecord::Base
belongs_to :imageable, polymorphic: true
end
画像URLの生成
Errorは、多型URLを生成する簡単な方法を提供します.polymorphic_path
So
polymorphic_path([parent, Image])
が生成されます.company_images_path(parent) # /companies/1/images
# or
product_images_path(parent) # /products/1/images
コントローラの親モデルの検索
イメージコントローラでは、関連するデータをスコープするために親情報が必要です
ResourceFinder
ヘルパー.class ImagesController < ApplicationController
include ResourceFinder
def index
@resources = parentable.images
render json: @resources
end
end
そして、我々はapp/controllers/concerns/resource_finder.rb
ヘルパーmodule ResourceFinder
def parentable
klass, param = parentable_class
return unless klass
klass.find(params[param.to_sym])
end
private
def parentable_class
params.each_key do |name|
if name.match?(/(.+)_id$/)
model = name[/([^\/.]*)_id$/, 1]
return model.classify.safe_constantize, name
end
nil
end
end
end
The parentable_class
paramを読んで、paramに関連付けられたクラスを定義します.我々の場合には、我々があるならば/products/:product_id/images
このメソッドはproduct_id
params keyとこのモデルからクラスを作成しようとします.成功すると、キーとクラスを返します.ハッピーハッキング!
Reference
この問題について(Ruby on Railsにおける多型モデル資源ファインダ), 我々は、より多くの情報をここで見つけました https://dev.to/dpaluy/polymorphic-model-resource-finder-in-ruby-on-rails-2jlgテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol