名前空間モデルを使用して、プラットフォームにさまざまなタイプのサービスを割り当てています。
関係:Platform has_many :services&Service belongs_to :platform
Inhéritance:、、Service::Service1 < ServiceなどService::Service2 < Service。
サービスタイプごとに異なるフィールドのセットがあります(私はMongoidを使用しているため、フィールドはモデルに宣言され、「サブモデル」タイプは_typeフィールドに格納されます)。
で、私はこのServicesController::newような新しいサービスを開始します:
def new
klass = "service/#{params[:type]}"
@service = klass.camelize.constantize.new
render :form
end
params[:type]ルートパラメータ(のようなもの/:platform_id/services/new/:type)によって与えられます
私のform見解では、サービスタイプ(Haml + simple_form)に応じてフィールドを表示できるようになりました:
= simple_form_for @service do |f|
[...]
- case @service.class
- when Service::Service1
= f.input :field1
[...]
これまではすべて正常に機能します:生成されたHTML入力は次のようになります:
<input class="string required" id="service_service1_field1" name="service_service1[field1]" size="50" type="text">
service_service1[field1]フィールド名として、私のparamsハッシュにはサブサービスに応じて異なるキーが含まれ、コントローラーのアクションでは、コードを「乾燥」さcreateせた状態で、サブサービスごとにケース/いつを記述する必要があります(service[field1]インスタンス化するには、正確なモデルを含む非表示フィールドを追加する必要があります)。
名前空間モデルを使用するときに、Railsにフィールド名としてルートクラスを使用させる方法はありますか?
編集:送信ボタンi18nについての同じ質問:テキストはすべてのサービスで同じであるため、 Railsは検索しhelpers.submit.service_service1.createたい場所を探します。helpers.submit.service.create