問題タブ [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.
ruby-on-rails - `has_many``through`アソシエーションで`find_or_create_by`を使用中にエラーが発生しました
find_or_create_by
アソシエーションで使用しているときに問題が発生しましたhas_many
through
。
オブジェクトの関連付けを呼び出すfind_or_create_by
と、Railsはエラーをスローします。roles
User
次のようにコードを変更することで、問題を回避することができました。
アソシエーションfind_or_create_by
で機能するかどうかを知りたいです。has_many
through
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
ruby-on-rails - Rails ActiveRecord の関連付けが一貫して更新されない
理解できない Rails 2.3.5 ActiveRecord の動作に遭遇しました。オブジェクトのアソシエーション ID が一貫性のない方法で更新される可能性があるようです。
これは、次の例で最もよく説明されています。
Post
string 属性'title'
を持つComment
モデルとstring 属性を持つモデルを作成します'content'
。
協会は次のとおりです。
シナリオ #1: 次のコードPost
では、関連付けられた を使用して 1 つを作成し、1 つComment
目Post
をfind
'ing して 2 つ目を作成し、1 つ目に 2 つ目Comment
を追加して、明示的な割り当てなしで2 つ目が関連付けられていることPost
を発見します。Post
Comment
シナリオ #2: 上記のコマンドを再度実行しますが、今回は結果に影響を与えない追加のコマンドを 1 つ挿入します。追加のコマンドは、作成後、に追加する前にpost2.comments
発生するものです。comment2
comment2
post1
シナリオ 1 では 2 つのコメントがあったのに対し、このシナリオでは1 つのコメントしか関連付けられていないことに注意してください。post2
大きな疑問:新規をpost2.comments
追加する前に実行して、どのコメントが に関連付けられているかに違いがあるのはなぜですか?Comment
post1
post2
ruby-on-rails - Railsで「両側」の多対多の関係を作成する方法は?
写真サイトがあるとします。作成者は、他の作成者からの更新を受け取るために購読できます。明らかに、著者 A が著者 B を購読しているからといって、B が A を購読しているとは限りません。したがって、モデルを構築します。
このように使用できます
- some_author.subscribed_by_author -- some_author が購読している著者のリスト。
- どのサブスクリプションでも、両端 (誰が誰にサブスクライブしているか) を知ることができます。
しかし問題は、Rails のみを使用して (プレーン SQL を使用せずに) ある作成者を購読している人のリストを取得する方法です。つまり、「some_author を購読しているのは誰ですか?」
質問: Rails には、関係を両側で機能させる機能、つまり、書くだけでsome_author.subscribed_BY_author
なく持つ機能はありsome_author_subscribed_TO_author
ますか? あるとすれば、それは何ですか?
PS明白な解決策は
- データベースの設計を変更し、「方向」という名前の列を追加します
- サブスクリプションが作成されるたびに 2 つのレコードを作成する
オーサーモデルに追加
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'"
しかし、データベースの設計を変更せずに解決策があるのだろうか。
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 に参加して、存在しない予約日の欠落レコードを埋める必要もあります。
orm - CakePHP の 2 つのモデル間で多数の関連付けと 1 つの関連付けを同時に定義する方法は?
CakePHP フレームワーク内で、私が長い間問題を抱えていたことの 1 つは、2 つのモデル間の同時hasOne
およびhasMany
関係を定義することです。例えば:
BlogEntry hasMany Comment
BlogEntry hasOne MostRecentComment
(最新のフィールドのMostRecentComment
はどこですか)Comment
created
BlogEntry モデル プロパティでこれらの関係を定義するのは問題があります。CakePHP の ORM は has-one 関係を として実装しているINNER JOIN
ため、複数の Comment があるとすぐに、BlogEntry::find('all')
呼び出しは BlogEntry ごとに複数の結果を返します。
過去にいくつかの方法でこれらの状況を回避してきました。
モデル コールバックを使用して (場合によっては、コントローラーやビューでも!)、MostRecentComment を次のようにシミュレートしまし
$this->data['MostRecentComment'] = $this->data['Comment'][0];
たComment.created
。また、MostRecentComment フィールドでソートする Cake の組み込みのページネーション機能もありません (たとえば、BlogEntry の結果をMostRecentComment.created
.追加の外部キーの維持、
BlogEntry.most_recent_comment_id
. これは維持するのが面倒で、Cake の ORM を壊しBlogEntry belongsTo MostRecentComment
ます。それは機能しますが、見た目が...間違っています。
これらの解決策には多くの要望が残されていたので、先日この問題に腰を下ろし、より良い解決策に取り組みました。私は最終的な解決策を以下に投稿しましたが、これまでずっと私を逃れてきた驚くほど単純な解決策があることを発見すると、わくわくします (そしておそらく少し悔やまれます)。または、私の基準を満たす他のソリューション:
- レベルで MostRecentComment フィールドで並べ替えることができる必要があり
Model::find
ます (つまり、結果のメッセージだけではありません)。 comments
またはblog_entries
テーブルにフィールドを追加する必要はありません。- CakePHP ORM の「精神」を尊重する必要があります。
(この質問のタイトルが可能な限り簡潔/有益であるかどうかもわかりません。)
ruby-on-rails - Ruby on Railsのアクティブレコードは、1つのSQLとWill_Paginateで平均を見つけます
次のモデルの関連付けがあります: 学生モデルと has_many スコア。
名前と平均、最小、最大スコアを示すリストを作成する必要があります。これまでのところ、各学生で student.scores.average(:score) を使用していますが、学生ごとに 1 つの sql を実行していることに気付きました。結合された1つのSQLでリストを作成するにはどうすればよいですか?
また、Will_Paginate プラグインでどのように使用しますか?
ありがとうございました
ruby-on-rails - has_many リレーションシップがあり、カスタムの制限とオフセットを設定したいと考えています。それらを数えるだけでなく、
ハイ、
私のコード:
このように、一度に10枚の画像だけを10枚のオフセットで取得したいと思います
そして、このようではありません
次に、そのプロファイルのすべての画像を何とか数えたいと思います。
ありがとう (:
終わり
ここで、この動作を他の has_many 関係に追加したいと思います。しかし、コードをコピーして貼り付けたくありません...何か考えはありますか? :P
ruby-on-rails - Rails は関連する *すべて* の tags.id で検索します
タグ付け可能な has_many タグのモデルがあるとします。関連付けられたタグの taggable_id フィールドですべてのタグ付け可能なものを見つけるにはどうすればよいですか?
結果は次のようになります。
構文は信じられないほどですが、結果の sql がタグの一部、またはすべてを持つタグ付け可能なものを返すという点で、私のニーズには合いません。
フィールド taggable_id の値が 1、2、および 3 の関連タグを持つタグ可能オブジェクトを見つけるにはどうすればよいですか?
アドバイスをありがとう。:)
アップデート:
他の人がここにたどり着いた場合に投稿する解決策を見つけました。また、改善のための提案を喜んで受け取る他の人の注意も必要です。:)
ruby-on-rails - Rails、:has_many を使用して親を削除せずに子を削除する
私は持っている
MyObjects
を削除せずにコンテナ内の をすべて削除したいMyContainer
。私のモデルには が:dependent => :destroy
ありますが、オブジェクトが遅いため、オブジェクトを削除して再作成する必要はありません。
このようなものは機能しません:
どうすればこれを達成できますか?