問題タブ [has-many]

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

ruby-on-rails - `has_many``through`アソシエーションで`find_or_create_by`を使用中にエラーが発生しました

find_or_create_byアソシエーションで使用しているときに問題が発生しましたhas_many through

オブジェクトの関連付けを呼び出すfind_or_create_byと、Railsはエラーをスローします。rolesUser

次のようにコードを変更することで、問題を回避することができました。

アソシエーションfind_or_create_byで機能するかどうかを知りたいです。has_many through

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

ruby-on-rails - Rails:モデルAの場合has_manyBbelongs_to C return Aここで、BはCに属し、Bは指定されたAに対して最近作成されましたか?

私には3つのモデルA、B、CがありA has_many Bます。B belongs to C、およびB has a created_on timestamp。Chas_manyAからB。

AがCに属するBを持ち、BがそのAに対して最後に作成されたBである すべてのAを返したい。

メソッドループでこれを行うことができます。これはnamed_scopesだけで実行できますか?それとも他のエレガントで効率的な方法ですか?

実世界(TM)の要求に従って、例A、B、およびCは、たとえば、ペット(A)、ペット名(B)、および名前(C)として想像できます。PetsNamesは特定の時間にペットに付けられ、任意の名前を多くのペットに付けることができます。どのペットも多くの名前を持つことができます(:through関係)。特定の名前について、その名前がそのペットに対して最後に作成されたPetNameであるすべてのペットが必要です。呼び出しは次のようになります@name.pets.most_recently_named_as

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

ruby-on-rails - Rails ActiveRecord の関連付けが一貫して更新されない

理解できない Rails 2.3.5 ActiveRecord の動作に遭遇しました。オブジェクトのアソシエーション ID が一貫性のない方法で更新される可能性があるようです。

これは、次の例で最もよく説明されています。

Poststring 属性'title'を持つCommentモデルとstring 属性を持つモデルを作成します'content'

協会は次のとおりです。

シナリオ #1: 次のコードPostでは、関連付けられた を使用して 1 つを作成し、1 つCommentPostfind'ing して 2 つ目を作成し、1 つ目に 2 つ目Commentを追加して、明示的な割り当てなしで2 つ目が関連付けられていることPostを発見します。PostComment

シナリオ #2: 上記のコマンドを再度実行しますが、今回は結果に影響を与えない追加のコマンドを 1 つ挿入します。追加のコマンドは、作成、に追加する前にpost2.comments発生するものです。comment2comment2post1

シナリオ 1 では 2 つのコメントがあったのに対し、このシナリオでは1 つのコメントしか関連付けられていないことに注意してください。post2

大きな疑問:新規をpost2.comments追加する前に実行して、どのコメントが に関連付けられているかに違いがあるのはなぜですか?Commentpost1post2

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

ruby-on-rails - Railsで「両側」の多対多の関係を作成する方法は?

写真サイトがあるとします。作成者は、他の作成者からの更新を受け取るために購読できます。明らかに、著者 A が著者 B を購読しているからといって、B が A を購読しているとは限りません。したがって、モデルを構築します。

このように使用できます

  1. some_author.subscribed_by_author -- some_author が購読している著者のリスト。
  2. どのサブスクリプションでも、両端 (誰が誰にサブスクライブしているか) を知ることができます。

しかし問題は、Rails のみを使用して (プレーン SQL を使用せずに) ある作成者を購読している人のリストを取得する方法です。つまり、「some_author を購読しているのは誰ですか?」

質問: Rails には、関係を両側で機能させる機能、つまり、書くだけでsome_author.subscribed_BY_authorなく持つ機能はありsome_author_subscribed_TO_authorますか? あるとすれば、それは何ですか?

PS明白な解決策は

  1. データベースの設計を変更し、「方向」という名前の列を追加します
  2. サブスクリプションが作成されるたびに 2 つのレコードを作成する
  3. オーサーモデルに追加

    has_many :subscribed_BY_author, :through => :subscriptions, :source => :subscribed_to, :conditions => "direction = 'by'"

    has_many :subscribed_TO_author, :through => :subscriptions, :source => :subscribed_to, :conditions => "direction = 'to'"

しかし、データベースの設計を変更せずに解決策があるのだろうか。

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

ruby-on-rails - 集約条件付き has_many Rails 関連付け

これが実現可能かどうか、または望ましいかどうかはわかりません

しかし、has_many リレーションシップまたは条件付きの named_scope タイプのリレーションシップを構築して、2 つではなく 1 つの単純なリレーションシップで問題を解決したいと考えています。

現在、基本的に同じ情報を含み、同じキー room_id を介して同じモデル ルームに属している 2 つのモデルがありますが、2 つの異なる方法でデータを保持しています。1 つは特定の日付に関する特定の情報を含み、2 番目の一般的な曜日の料金は含まれています。主な障害は、Availables に特定のレコードの情報がまったく含まれていない可能性があることです。その場合、特定の日付の特定の価格ではなく、平均の room_rates に従う必要があります。

指針や提案はありますか?ありがとう

利用可能

客室料金

それとも finder_sql メソッドでしょうか? そのような:

ただし、room_rates に参加して、存在しない予約日の欠落レコードを埋める必要もあります。

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

orm - CakePHP の 2 つのモデル間で多数の関連付けと 1 つの関連付けを同時に定義する方法は?

CakePHP フレームワーク内で、私が長い間問題を抱えていたことの 1 つは、2 つのモデル間の同時hasOneおよびhasMany関係を定義することです。例えば:

BlogEntry hasMany Comment
BlogEntry hasOne MostRecentComment(最新のフィールドのMostRecentCommentはどこですか)Commentcreated

BlogEntry モデル プロパティでこれらの関係を定義するのは問題があります。CakePHP の ORM は has-one 関係を として実装しているINNER JOINため、複数の Comment があるとすぐに、BlogEntry::find('all')呼び出しは BlogEntry ごとに複数の結果を返します。

過去にいくつかの方法でこれらの状況を回避してきました。

  1. モデル コールバックを使用して (場合によっては、コントローラーやビューでも!)、MostRecentComment を次のようにシミュレートしまし
    $this->data['MostRecentComment'] = $this->data['Comment'][0];
    Comment.created。また、MostRecentComment フィールドでソートする Cake の組み込みのページネーション機能もありません (たとえば、BlogEntry の結果をMostRecentComment.created.

  2. 追加の外部キーの維持、BlogEntry.most_recent_comment_id. これは維持するのが面倒で、Cake の ORM を壊しBlogEntry belongsTo MostRecentCommentます。それは機能しますが、見た目が...間違っています。

これらの解決策には多くの要望が残されていたので、先日この問題に腰を下ろし、より良い解決策に取り組みました。私は最終的な解決策を以下に投稿しましたが、これまでずっと私を逃れてきた驚くほど単純な解決策があることを発見すると、わくわくします (そしておそらく少し悔やまれます)。または、私の基準を満たす他のソリューション:

  • レベルで MostRecentComment フィールドで並べ替えることができる必要がありModel::findます (つまり、結果のメッセージだけではありません)。
  • commentsまたはblog_entriesテーブルにフィールドを追加する必要はありません。
  • CakePHP ORM の「精神」を尊重する必要があります。

(この質問のタイトルが可能な限り簡潔/有益であるかどうかもわかりません。)

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

ruby-on-rails - Ruby on Railsのアクティブレコードは、1つのSQLとWill_Paginateで平均を見つけます

次のモデルの関連付けがあります: 学生モデルと has_many スコア。

名前と平均、最小、最大スコアを示すリストを作成する必要があります。これまでのところ、各学生で student.scores.average(:score) を使用していますが、学生ごとに 1 つの sql を実行していることに気付きました。結合された1つのSQLでリストを作成するにはどうすればよいですか?

また、Will_Paginate プラグインでどのように使用しますか?

ありがとうございました

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

ruby-on-rails - has_many リレーションシップがあり、カスタムの制限とオフセットを設定したいと考えています。それらを数えるだけでなく、

ハイ、

私のコード:

このように、一度に10枚の画像だけを10枚のオフセットで取得したいと思います

そして、このようではありません

次に、そのプロファイルのすべての画像を何とか数えたいと思います。

ありがとう (:


終わり

ここで、この動作を他の has_many 関係に追加したいと思います。しかし、コードをコピーして貼り付けたくありません...何か考えはありますか? :P

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

ruby-on-rails - Rails は関連する *すべて* の tags.id で検索します

タグ付け可能な has_many タグのモデルがあるとします。関連付けられたタグの taggable_id フィールドですべてのタグ付け可能なものを見つけるにはどうすればよいですか?

結果は次のようになります。

構文は信じられないほどですが、結果の sql がタグの一部、またはすべてを持つタグ付け可能なものを返すという点で、私のニーズには合いません。

フィールド taggable_id の値が 1、2、および 3 の関連タグを持つタグ可能オブジェクトを見つけるにはどうすればよいですか?

アドバイスをありがとう。:)

アップデート:

他の人がここにたどり着いた場合に投稿する解決策を見つけました。また、改善のための提案を喜んで受け取る他の人の注意も必要です。:)

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

ruby-on-rails - Rails、:has_many を使用して親を削除せずに子を削除する

私は持っている

MyObjectsを削除せずにコンテナ内の をすべて削除したいMyContainer。私のモデルには が:dependent => :destroyありますが、オブジェクトが遅いため、オブジェクトを削除して再作成する必要はありません。

このようなものは機能しません:

どうすればこれを達成できますか?