私は多くの多型の関係に多く持っている:抽出関連モデル
/contacts/1/tasks?status_id_is=1&user_id_is=1
しかし、時には:
class DocumentTask < ActiveRecord::Base
belongs_to :task
belongs_to :document, polymorphic: true
end
class Task < ActiveRecord::Base
has_many :documents, through: :document_tasks
end
class Contact < ActiveRecord::Base
has_many :tasks, though: :document_tasks, as: :document
end
class Service < ActiveRecord::Base
has_many :tasks, through: :document_tasks, as: :document
end
を私は、サーバーに情報を送信し、このように見えるURLを持っていますこれは多様な関係があるため、次のように見えます。
/services/1/tasks?status_id_is=1&user_id_is=1
私のコントロールr、その多型関係の対象を取得する必要があります。一般的に、私は、次の操作を行うことができます。URLがクエリ文字列が含まれている場合status_id_isとuser_id_isが正規表現にマッチするので、
document_id = params.detect {|name,_| name =~ /(.+)_id/}
@document = document_id[0].gsub("_id","").capitalize.constantize.find(document_id[1])
しかし、これは動作しません。明白な解決策は、正規表現を/^(.+)_id$/
に変更することですが、その他のユースケースがいくつ発生する可能性があるかは誰にも分かります。
私が欲しいものを達成する良い方法はありますか?たとえば、request.association_parameter
またはparams.association_parameter
のようなリクエストオブジェクト内の何か。
'status_id_is'と' user_id_is'とは何ですか?それらは 'document'オブジェクトの' status_id'属性と 'user_id'属性を参照していますか?同様に、Task、Contact、Serviceのすべてのモデルに 'status_id'属性と' user_id'属性があるかどうかを尋ねています。 –
status_id_isとuser_id_isは、タスクに関連するフィルタパラメータです。彼らはドキュメントとは関係ありません。モデルのどれもがstatus_idまたはuser_id属性を持っていません。同時に、私は容易に壊れない柔軟なソリューションを望んでいます。安い解決策は、/^(.+)_id$/のような正規表現を使うことですが、誰が知っていれば、後で道路を壊す可能性があります。 – Donato
{}ブロックで2つの引数とともに '.detect'が使われているのを見たことがありません。それは何をするためのものか?ちょうど私はコードが何をしようとしているのか理解できました。 –