私は既存の Rails サイトでメンテナンス作業を行っており、奇妙なバグに遭遇しました。ここにはRegistrations
、 、Business Categories
、およびのいくつかの異なるモデルが含まれますServices
。 Registrations
HABTMBusiness Categories
とServices
、それぞれ HABTM Registrations
. HABTM 関係ごとに、適切な非主キー結合テーブルが存在します。
ユーザーが登録を更新するために入力する 2 つのセクション (ビジネス カテゴリ用とサービス用) を持つ 1 つのフォームがあります。2 つのセクションはそれぞれ、潜在的なビジネス カテゴリごとに 1 つずつ、サービスごとに 1 つずつ、多くのチェックボックスで構成されています。たとえば、ビジネス カテゴリのチェックボックスを生成する HAML は次のとおりです。
- BusinessCategory.find(:all, :order => ['business_type']).each do |business_category|
%li
= check_box_tag "registration[business_category_ids][]", business_category.id, (@registration.business_categories.include?(business_category)) ? true : false
= business_category.business_type
コントローラーの更新機能でRegistrations
:
@registration = current_user.registration
if @registration.update_attributes(params[:registration])
flash[:notice] = "Company Successfully Updated."
redirect_to :action => 'edit_company'
else
... do appropriate error reporting and redirection ...
一般に、すべてが正常に機能します。ユーザーは、必要に応じていくつでもチェックボックスをオンにしてサインアップできます。登録のビジネス カテゴリとサービスには、チェック ボックスが反映されます。ほとんどの場合、その後の変更も機能します。ただし、ユーザーがフォームの特定の部分 (ビジネス カテゴリまたはサービス) のすべてのボックスの選択を解除すると、フォームのその部分への変更は保存されません。エラー メッセージは表示されず、「会社が正常に更新されました」というフラッシュ メッセージがまだ表示されますが、フォームが送信される前にチェック ボックスがオフになっていても、チェック ボックスはオンのままです。
サイトを再構築/リファクタリングするhas_many :through
場合、HABTM よりも使用する可能性が高くなりますが、予算が十分ではありません。HABTM が手放すのに苦労しているように見える理由について、何か考えがある人はいますか?
ご検討いただきありがとうございます。
ジャスティン