問題タブ [nested-forms]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
268 参照

ruby-on-rails - ネストされたフォームと link_to_function

次のようなネストされたフォームがあります。

ページを初めてロードしたとき、最初の fields_for ブロックの ID は 0 です。

初めて「日付を追加」をクリックすると、新しい fields_for ブロックが id = 1 で作成されます。

次に、「日付を追加」をクリックするたびに、新しい fields_for ブロックが表示されますが、ID は 1 のままです。

HTML の例はより明示的かもしれません。ここに私が得た出力があります:

助けてくれてありがとう!

0 投票する
1 に答える
1717 参照

ruby-on-rails - rails:子レコードを作成しながら、存在しない場合は親を作成します

次のベストプラクティスはありますか?:

has_manyInventoryのManufacturerモデルがあります

新しい在庫フォームで、Manufacturer.nameにマップするフィールドが必要です。これにより、新しい在庫フォームをアプリに送信したときに、次のようになります。

  • フォームから「名前」を持つメーカーを検索します
    • 存在する場合は、IDを@ Inventory.manufacturer_idに割り当て、@inventoryを保存します
    • 存在しない場合は、フォームから「name」を使用して製造元を作成し、IDを@inventory.manufacturer_idに割り当てて保存します。
    • 新しい在庫フォームで検証を機能させる
      • そのため、在庫フォームが「名前」以外のフィールドの検証に失敗した場合
        • 「名前」フィールドには、ユーザーが入力した内容が再入力されます(ただし、フォームが検証に合格しない限り、新しいメーカーは作成されません)
0 投票する
1 に答える
1047 参照

ruby-on-rails - ネストされたモデルは未定義のメソッドエラーをスローします

私はRailsCast197をフォローして、このネストされたモデル/フォームを試し、このコードに2時間以上頭を悩ませてきましたが、役に立ちませんでした。私は何を見落としていますか?

私は次のモデルを持っています:

私のWorkoutsControllerには、次のものがあります。

テストを実行してブラウザーでコントローラーを呼び出すと、次のエラーが発生します。

助けてくれてありがとう-私のRoRnoobilityは私を驚かせなくなります!

編集:fflyer05:コレクションを反復処理するRailsCastと同じコードを使用し、performed_exercises [0]でperformed_setsをビルドしようとしましたが、機能しません。他のことをすると、初期化されていない定数PerformedExercise::PerformedSetエラーが発生します

0 投票する
1 に答える
439 参照

ruby-on-rails - How to write properly a nested form with a N-N relation

While working on Rails 3 app, I came to the problem of nested forms.

One collection is a set of predefined objects (created with db:seed). The other collection should show a form to allow to choose a few elements.

An example is better than a long description, so here it is.

Suppose you have 2 models: User and Group.

Suppose there are a few groups: Member, Admins, Guests, ...

You want your users to have multiple groups, and so you need a intermediate table: memberships.

The model code is obvious:

#xA;

The controller should not need to be changed. The view, however is more complicated.

I want to show a list of checkboxes to choose a few groups of the predefined ones.

I am using here the special _destroy field, with reversed value, to destroy when it is actually unchecked (and so add the user to the group when it is checked)

#xA;

However, this do not work as expected, because the form g will always create an input with an arbitrary id after each group (and even break the layout by including it after the </li>):

#xA;

Knowing the syntax of nested attributes is the following:

#xA;

Sending every time the id will not work, because it will try to update a record which does not exist instead of creating it, and try to destroy when the record does not exist.

The current solution I found is to remove all the ids, which are wrong anyway (they should be the ids of the memberships, instead of simple indexes), and add the real id when the user already has the group. (this is called in the controller before create and update)

#xA;

This seems so wrong, and it adds a lot of logic in the controller, just to control the bad behavior of the view fields_for helper.

Another solution is to create all the form html yourself, trying to mimic the Rails conventions, and avoid the id problem, but that is really noisy in the code and I believe there is a better way.

  • Is it a way to make fields_for work better?
  • Is there any helper more appropriate ?
  • Am I reasoning wrong somewhere in this question?
  • How would you do to achieve this?

Thanks

0 投票する
2 に答える
3889 参照

ruby-on-rails - Rails のネストされた属性とカスタム検証

私は Ruby と Rails (2.3.8 を使用) の両方にかなり慣れていないので、ここで明らかな何かが欠けている場合はご容赦ください。

私のコードにはプランがあり、プランには多くの Plan_Steps があります。各 Plan_Step には番号があります (「1st」、「2nd」などを示すため)。Plan を更新するためのフォームがあり、各 Plan_Step に一意の番号があることを検証する必要があります。以下のコードは、設計のより良い説明を与えるかもしれません:

モデル/plan.rb:

コントローラー/plans_controller.rb:

フォームが更新を送信すると、params ハッシュは次のようになります。

データベースには、次の Plan_Steps のエントリが含まれています。

ID=2 が Number=2 で存在することに注意してください。私がしようとしているのは、ID=2 を削除し、Number=2 で新しいエントリ (ID=3) を作成することです。

OK、その設定で、ここに私の問題があります:

検証で plan_steps を呼び出すと、update_attributes に渡された params[] 配列からではなく、データベースから値を取得しているように見えます。

たとえば、検証で「puts」行のコメントを外すと、Plan_Steps の説明は、渡されたパラメーターから存在するものとしてではなく、データベース内に存在するものとして表示されます。これは、受信した Plan_Steps を検証できないことを意味します。

Plan_Steps モデルで検証を行うこともできません。間違っていない限り、検証はデータベースに対して行われるためです (渡されたパラメーターではありません)。

これが言葉遣いの悪い質問である場合は申し訳ありませんが、かなり具体的です。説明が必要な場合は、お尋ねください。

そして、覚えておいてください、私は初心者なので、本当にばかげた間違いを簡単に犯す可能性があります.

0 投票する
2 に答える
3974 参照

ruby-on-rails - Railsのfields_forに配列を渡すにはどうすればよいですか?

fields_for関連付け内のレコードのサブセットで使用したい。

私はMonthモデルを持っていhas_many :paymentsます。

しかし、私の見解ではfields_for、これらの支払いの一部のみを希望しています。例えば:

これはうまくいきません。

通常のシンボル ( ) アプローチfields_forではなく、一連のレコードを に渡すことはできますか?fields_for :payments

0 投票する
1 に答える
102 参照

ruby-on-rails - 単一および複数の返されたオブジェクトを処理するレール

Railsでは.eachdo||を使用できます クエリの返された結果をループします。しかし、1行だけが返される場合はどうなりますか?またはあなたは0、1、または多くの可能性がありますか?エラーをスローせずにこれらのシナリオをどのように処理しますか?

特にこの状況は、ライアンのrailcastブログ(http://railscasts.com/episodes/196-nested-model-form-part-1)に従ってネストされた属性を受け入れている状況です。

1つまたは複数のネストされたアイテムを返すことができます。これらのアイテムをループしてXMLフォームを作成する必要があります。

0 投票する
2 に答える
1542 参照

ruby-on-rails - ネストされたフォーム - 子モデルの入力に基づいて親モデルを検証する方法は?

ネストされたフォームを持ち、関係は次のようになります

InspectionComponent に入力された属性に依存するカスタム検証メソッドが Inspection にあります。検証方法 - InspectionComponent 属性が保存されていないか、Inspection の検証で使用できません。

ありがとう!

編集:物事をもう少し明確にするために、私がやろうとしていることの例を次に示します。

検査には属性ステータスがあります。InspectionComponent には属性 status もあります。

Inspection 編集フォームにはネストされた InspectionComponents があり、このフォームで各モデルのステータスを更新できます。@inspection.status は、すべての @inspection_component.status == 'complete' の場合にのみ 'complete' とマークできる必要があります。

したがって、@inspection を検証するときは、ユーザーが @inspection_component.status に入力した内容を確認できる必要があります。

明らかに、コントローラーの両方のインスタンスのパラメーターにアクセスできますが、検証が行われるモデルでは、これを行う方法がわかりません。

うまくいけば、それは明らかです、ありがとう。

0 投票する
1 に答える
8611 参照

ruby-on-rails - accept_nested_attributes_for を使用して、新しいレコードを作成するか、既存のレコードを更新します

最新情報については、大きなアップデートをお読みください。

こんにちは、みなさん、

ユーザーテーブル、興味テーブル、および評価値を持つ結合 user_interests テーブルの 3 つのテーブルを含む Rails アプリに多対多の関係があります。 1-10 スケール。

私は基本的に、新しいユーザーがサインアップするときに評価を作成し、将来の日付でプロファイル情報と同時に評価を編集する方法を探しています.

この質問に従ってみましたRails nested form with has_many :through, how to edit attributes of join model? しかし、私が抱えている問題は、選択リストをミックスに組み込み、ユーザーを評価するために複数の興味を持っていることです。

モデルコード:

コードを表示:

また、コントローラーの新規/編集アクションに以下を含めました@user.interests.build.build_interest

私が直面している問題は、複数の関心度が必要な場合に、params ハッシュで渡される関心度が 1 つだけであることです。また、レールによってスローされた例外が発生しています

問題の原因となっている、見逃した、または間違った細部は何ですか?

編集:

これを強制的に機能させる方法を見つけましたが、クロム開発者ツールで HTML を手動で編集する必要があります。フォーム要素の :name 属性が生成されてuser[user_interests_attributes][rating]いますが、それを変更するとuser[user_interests_attributes][][rating]、レコードを更新したときに機能します。ただし、フォーム オブジェクトに関連付けられているフォーム要素の :name を手動で指定することはできません。では、Rails が考える 1 つだけではなく、複数の利率が渡されていることを示すにはどうすればよいでしょうか?

ビッグアップデート:

少し変更を加えた半機能バージョンを作成しました。

コードを表示:

コントローラーコード:

これで、評価が存在しない場合に user_interests を編集して更新または作成できるようになりましたが、新しいユーザーを作成しようとすると、ユーザーが空であるというエラーが表示されます。また、フォーム内の関心属性にアクセスして、ユーザーが実際に評価している関心を表示することもできません。誰でもこれらの警告を手伝ってもらえますか?

0 投票する
2 に答える
16476 参照

ruby-on-rails - has_many 関連付けで Formtastic の Semantic_fields_for を使用する

formtastic を使用してネストされたフォームを作成しようとしています。以下にコードを含めましたが、以下にリストしたいくつかの問題が発生しています。助言がありますか?ありがとう。

  1. ホームが保存されると、デフォルトのユーザーが作成されます。既存のレコードではなく、新しく作成されたレコードのみをフォームに表示するにはどうすればよいですか?

  2. #1が不可能な場合、既存のレコードを更新するにはどうすればよいですか? accept_nested_attributes_for に update_only を設定しましたが、まだ新しいレコードが作成されています。

  3. コントローラー アクションで 2.times{ @home.home_members.build } を実行しています。@home.home_members のサイズを出力すると、期待どおり 3 (1 つは既に存在します) になります。フォームに 2 セットの入力しか表示されないのはなぜですか? 1 セットには既存の home_member データが入力されています。