0

私は既存の Rails サイトでメンテナンス作業を行っており、奇妙なバグに遭遇しました。ここにはRegistrations、 、Business Categories、およびのいくつかの異なるモデルが含まれますServicesRegistrationsHABTMBusiness CategoriesServices、それぞれ 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 が手放すのに苦労しているように見える理由について、何か考えがある人はいますか?

ご検討いただきありがとうございます。

ジャスティン

4

1 に答える 1

0

チェックボックスが選択されていない場合、ブラウザはそのフィールドに対して何も送り返しません。Rails は、チェックボックスと同じ名前の非表示フィールドを含めることで、これを回避します。Rails は非表示フィールドのみ (チェックボックスをオフ) または両方のフィールド (チェックボックスをオン) のいずれかを返します。問題は、これがチェックボックス フィールドの配列では機能しないことです。私は自分の HAML について詳しく知りませんが、これはあなたの問題だと思います。チェックボックスがチェックされていない場合:registration、ハッシュにキーがないparamsため、何も更新されません。

API refを参照してください。

于 2010-03-25T17:47:50.660 に答える