問題タブ [has-many-through]

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 に答える
119 参照

ruby-on-rails - has_many 関係は、ビジネスの知覚において正しくも論理的でもないようです。beens_to_many のようなものが必要ですか?

私の状況はこんな感じです。会社には多くのユーザーがいて、ユーザーは多くの会社に所属している場合があります。そして、現在の実装は以下のようなものです。

それは機能しますが、「ユーザーは多くの会社を持っています」は論理的に意味がありません。これは、belongs_to_many company のようなものに違いありません。has_and_belongs_to_many を使用する必要がありますか?

これらの関係を表す正しい方法を教えてください。

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

ruby-on-rails - has_many :through と in_place_edit の使用方法

キャンペーンと連絡先の 2 つのモデルがあります。

キャンペーンには多数の連絡先があります。

連絡先には、_多くのキャンペーンがあります。

現在、各連絡先には contact.date_entered 属性があります。キャンペーンは、その日付を、キャンペーンに属するさまざまなイベントのカウントダウンの日付として使用します。

ただし、特定の連絡先のキャンペーンを X 日間遅らせる必要がある場合があります。この例では、campaigncontact.delaydays = 10 です。

場合によっては、特定の連絡先に対してキャンペーンを完全に停止する必要があるため、今のところ、campaigncontact.delaydays = 1 に設定します (これに大きな問題はありますか?)

デフォルトでは、キャンペーンの連絡先が存在しないと想定しています (しかし、それがどのように機能するかわかりませんか?)

だからここに私がやろうとしたことがあります:

では、ここで質問です。上記は正しいですか。その場合、ユーザーが特定の連絡先のキャンペーンの遅延を編集できるようにするにはどうすればよいですか?

今のところ、連絡先ビューから行いたいと思います。

これは私が試したものです:

連絡先コントローラーで (?)

そしてビューで

どうすれば正しくなりますか?

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

ruby-on-rails - has_many:throughの結合モデルでnamed_scopesを使用する

表面が非常にシンプルなもので、壁に頭をぶつけてきました。次の簡略化されたモデルがあるとしましょう。

user.rb

membership.rb

group.rb

簡単ですよね?したがって、私がやりたいのは、結合モデルの既存の名前付きスコープを使用して、ユーザーがアクティブになっているすべてのグループのコレクションを取得することです。User.find(1).groups.activeに沿った何か。明らかに、これは機能しません。

User.find(1).membrships.active.all(:include => :group)しかし、現状では、メンバーシップとグループのコレクションを返すようなことをする必要があります。私はそれを望んでいません。

Membershipモデルの:active named_scopeを複製する条件で、Userモデルに別のhas_manyを追加できることは知っていますが、それはひどいことです。

だから私の質問:モデル間を直接トラバースするときに中間の名前付きスコープを使用する方法はありますか?どうもありがとう。

0 投票する
4 に答える
4993 参照

ruby-on-rails - accept_nested_attributes_for の使用方法を教えてください。

簡潔にするために質問を編集し、行ったことを更新します。

会社の複数の住所を持つモデルを作成し、単一の住所を連絡先に割り当て、連絡先の作成または編集時にそれらを割り当てるにはどうすればよいですか?

新しい連絡先の作成時にアドレスを追加できるように、ネストされた属性を使用したいと考えています。最初から入力するのではなく、既存のアドレスからドロップダウンするオプションが必要な場合があるため、そのアドレスは独自のモデルとして存在します。

私はそれを機能させることができないようです。nil:NilClass エラーに対して未定義のメソッド「build」が表示されます

連絡先の私のモデルは次のとおりです。

これが住所の私のモデルです:

新しい連絡先を作成するときに、会社に属する他の連絡先に属するすべてのアドレスにアクセスしたいと思います。だからここに私が会社を表す方法があります:

これは、View for _form for Contact にフィールドを作成して、誰かが新しい Contact を作成するときに、住所を Address モデルに渡し、その住所を Contact に関連付ける方法です。

編集しようとすると、Street 1 のフィールドが空白になります。また、show.html.erb の値を表示する方法がわかりません。

下部にあるのは私のエラー コンソールです。アドレス テーブルに値を作成できないようです。

私の連絡先コントローラーは次のとおりです。

エラー コンソールのスニペットを 次に示します。属性を投稿していますが、アドレス テーブルで作成していません。

ContactsController#create の処理 (2010-05-12 21:16:17 の 127.0.0.1 の場合)

[POST] パラメータ: {"commit"=>"Submit", "authenticity_token"=>"d8/gx0zy0Vgg6ghfcbAYL0YtGjYIUC2b1aG+dDKjuSs=", "contact"=>{"company_name"=>"Allyforce", "title"=>" "、"campaign_id"=>"2"、"address_attributes"=>{"street1"=>"abc"}、"fax"=>""、"phone"=>""、"last_name"=>""" , "date_entered"=>"2010-05-12", "email"=>"", "first_name"=>"abc"}}

Company Load (0.0ms)[0m [0mSELECT * FROM "companys" WHERE ("companys"."name" = 'Allyforce') LIMIT 1[0m

Address Create (16.0ms)[0m
[0;1mINSERT INTO "addresses" ("city", "zip", "created_at", "street1", "updated_at", "street2", "state") VALUES(NULL, NULL , '2010-05-13 04:16:18', NULL, '2010-05-13 04:16:18', NULL, NULL)[0m

連絡先の作成 (0.0ms)[0m
[0mINSERT INTO "contacts" ("company", "created_at", "title", "updated_at", "campaign_id", "address_id", "last_name", "phone", "fax" , "company_id", "date_entered", "first_name", "email") VALUES(NULL, '2010-05-13 04:16:18', '', '2010-05-13 04:16:18', 2, 2, '', '', '', 5, '2010-05-12', 'abc', '')[0m

0 投票する
3 に答える
1095 参照

ruby-on-rails - Ruby on Rails:has_many through frustrations

has_many throughでイライラする問題が発生しています。つまり、throughモデルは保存するまで作成されないという事実です。残念ながら、親を保存する前に、これらのモデルにデータを設定する必要があります。

緩い設定は次のとおりです。

保存する前に「wtf」にアクセスする必要があることを除いて、すべて問題ありません。

f = Foo.new =>#

f.bars=>[バーのリスト]

ここに空のリスト

f.wtfs => []

f.save!=>真

今私はものを手に入れます

f.wtfs=>[もののリスト]

私はこれを行うwtfsを明示的に作成することさえしました:

これにより、f.wtfsは入力されますが、バーは入力されません。保存して取得すると、予想されるwtfsの2倍になります。

誰かアイデアはありますか?

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

ruby-on-rails - 一方向に持っている-多く-スルー

カテゴリ、サブカテゴリ、および製品モデルがあります。

私は持っています:

のようなものを持つ方法はありますか

「subcategory」はproductに属していないため、「normal」レールの方法は機能しません。そのため、productにはsubcategory_idフィールドがありません。代わりに、クエリは次のようなものにする必要があります

それを行う方法はありますか?

ありがとう、

ニコラスホックイサザ

0 投票する
5 に答える
678 参照

ruby-on-rails - has_many :through レコードを 2 回作成する

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

したがって、質問を作成時のテストにバインドしようとすると、次のようになります。

6 つの SQL クエリがあり、testing_questions に 6 つのレコードが作成されます。なんで?

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

ruby-on-rails - Rails - :has_many :through から情報を見つけるためのロジックが必要です!

私は3つの関連するテーブルを持っています。ユーザー、オーダー、およびビューデータ

各ユーザーは多くの注文を持っていますが、同時に、各ユーザーは他のユーザーに属する特定の他の注文を表示できます。したがって、Viewables には と の属性がuser_idありorder_idます。

注文には :has_many :Users, :through => :viewables

オーダーのビューから検索することはできますか? だから何か

@viewable_orders = Orders.find(:all, :conditions => ["Viewable.user_id=?",1])

user_id=1 で表示可能な注文のリストを取得します。(これは機能しません。それ以外の場合は質問しません。:( ) 現在のユーザー (ログインしているユーザー) が他の人の注文のリストを表示できるサイドバーのようなものを実行できるという考えです。たとえば、

表示できる注文を持っている他の 3 人のユーザーは、最終的に次のように表示されます。

  1. ジャック (2)
    • 基本オーダー (registry_id: 1)
    • 新規注文 (registry_id: 29)
  2. エイミー (4)
    • ショートオーダー (registry_id: 12)
  3. ジル (5)
    • ハードウェア注文 (14)
    • ピンクオーダー (17)
    • ソフトウェア注文 (76)

(括弧内の数字は、それぞれの user_id または registry_id です)

したがって、現在のユーザーが見つけることができるすべての注文のリストを見つけるには (現在のユーザーの user_id が 1 であると仮定)、次のようにします。

これにより、上記の 6 つのレジストリのコレクションが得られます。これを行う最も簡単な方法は、

しかし、それは長いリストでは見苦しくなります。

ありがとう!

0 投票する
3 に答える
2110 参照

ruby-on-rails - 多形has_manyの重複を防ぐレール:関連付けを介して

アソシエーションを通じて多形has_manyのエントリの重複を防ぐ簡単な、または少なくともエレガントな方法はありますか?

タグ付けできるストーリーとリンクの2つのモデルがあります。ここではプラグインを使用しないという意識的な決断をしています。私は実際に起こっていることすべてを理解し、私が完全に理解していない他の誰かのコードに依存しないようにしたいです。

私の質問が何になっているのかを確認するために、コンソールで次のコマンドを実行した場合(ストーリーオブジェクトとタグオブジェクトがデータベースにすでに存在していると仮定)

私のタギング結合テーブルには2つのエントリが追加され、それぞれに同じ正確なデータがあります(tag_id = 1、taggable_id = 1、taggable_type = "Story")。それは私にはあまり適切ではないようです。そこで、これを防ぐために、タグ付けモデルに次のものを追加しました。

ほぼ意図したとおりに機能しますが、ストーリーまたはリンクに重複するタグを追加しようとすると、ActiveRecord :: RecordInvalid:Validationfailed例外が発生します。リストに関連付けを追加すると、保存と呼ばれるようです。(sansを保存するのではなく!)何かがうまくいかなかった場合に、単にfalseを返すのではなく、例外を発生させるメソッド。それは私がしたいことではありません。新しいタグを追加する試みはすべてtry/catchで囲むことができると思いますが、それは例外を予期してはならないという考えに反し、これは私が完全に期待していることです。

重複が存在するためにオブジェクトをデータベースにサイレントに保存しないだけの場合に例外を発生させない、これを行うためのより良い方法はありますか?

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

ruby-on-rails - レール:双方向has_many:関係を介して

Railsアプリケーションには3つのモデルがありGameます。プレイされているゲームのインスタンスを表します。Playerゲームの参加者のインスタンスを表します。Userゲームに参加できる登録者を表します。

それぞれGameが多数を持つことができPlayers、それぞれが多数を持つUserことができますPlayers(1人の人が一度に複数のゲームに参加できます)。しかし、それぞれPlayerが正確に1つGameであり、正確に1つを表しUserます。したがって、現在の私の関係は次のとおりです。

...当然、playersテーブルには列がgame_idありますが、外部キーはありません。user_idgamesusers

Gameまた、それぞれが多くのUsers演奏をしているという事実を表現したいと思います。そしてそれぞれが彼らが遊んでUserいる多くを持っています。Gamesどうすればよいですか?追加するだけで十分ですか