問題タブ [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 投票する
2 に答える
2916 参照

sql - has_many :through のインデックス

User と City の 2 つのモデルがあり、3 番目のモデル CityPermission で結合されているとします。

現在、次の移行コード スニペットを使用して、結合テーブルとテーブルのインデックスを作成しています。

これらは作成するのに最適なインデックスですか? これらのインデックスを使用すると、結合テーブルを介して前後にすばやくアクセスしたり、テーブル自体内ですばやく検索したりできますか、それとも他のより良い方法はありますか? これを少し別の言い方をすると、与えられたこれらのインデックスは、cityクラスuserCity と User のインスタンス変数でありcity.users、 、city.city_permissionsuser.cities、およびuser.city_permissionsがすべて同じようにうまく機能するでしょうか?

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

jquery - rails:has_manyを更新する方法:jQuery経由でリレーションを介して?

初心者の質問で申し訳ありませんが、Rails と jQuery を使い始めたばかりです。次のシナリオがあります。

contactscompaniesおよびcontact_company_joins(ccj)の3つのクラスがあります。私が作成した 3 つのクラスすべてについてmodelscontrollerおよびviews. 明らかに、連絡先と会社は結合テーブル ccj (を使用has_many :through) を介して接続されます。

contacts <-> contact_company_joins <-> companies

連絡先の「表示」ビューで、連絡先が接続されているすべての会社 (および電話番号などの会社自体に関する追加情報) を一覧表示するテーブルを表示したいと考えています。私の会社の見解では、私は同じことをしたいと考えていますが、今回は従業員 (連絡先) の詳細についてです。テーブルの各行には、最後に典型的な「削除」リンクがあり、その関数を jQuery 関数の 1 つに接続しました。

両方のビュー (連絡先と会社) で、削除アクションによって ccj コントローラーの破棄機能が表示されます。私が今やりたいことは、削除機能を呼び出している個々のサイト (連絡先または会社) のテーブルを更新または再レンダリングすることですが、テーブルの一部のみです。上記の「成功」関数で実装する必要があると思いますか?しかし、繰り返しになりますが、ccj のコントローラーから何かを返したとしても (レンダリングされた部分的なものですか?)...それは連絡先ビューと会社ビューの両方で同じですよね? ccj オブジェクトを破棄するための Ajax 呼び出しの後、連絡先のビュー (新しい会社のテーブル) 用の新しい DOM オブジェクトを取得するだけでなく、私の会社の見解?

これがすべて理にかなっていることを願っています:-)

よろしく、

セバスチャン

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

ruby-on-rails - レールで複合外部キーを持つことは可能ですか?

次のデータ スキーマがあるとします。

この例では、複数のリソースがあり、それぞれがさまざまな方法で使用できるとします。たとえば、1 つのリソースはwidget. Widgets編集することができfoo、編集することができますbar。 s はed およびedGizmoにすることもできます。これらの使用タイプは異なるレートで請求され、クライアントごとに異なるレートで請求されることもあります。(リソースの) 使用が発生するたびに、Usage テーブルに記録されます。各請求レート (クライアント、リソース、およびタイプの組み合わせ) は、請求テーブルに格納されます。foobar

(ちなみに、このデータ スキーマがこの問題にアプローチする正しい方法でない場合は、提案をしてください。)

Ruby on Rails と ActiveRecord を使用して、has_manyBillings から Usages への関係を作成し、特定の請求レートの使用インスタンスのリストを取得することはできますか? has_many, :through私が知らないの構文はありますか?

繰り返しますが、私はこの問題に間違った角度からアプローチしている可能性があるので、より良い方法を思いつくことができれば、声を上げてください!

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

ruby-on-rails - has_many :through を使用した rails map.resources は機能しませんか?

次のように指定された 3 つの (関連する) モデルがあります。

comments_receivedすべてのfor をルートで参照できるようにしたいと思いますuser。たとえば、すべての投稿のコメントを一括承認するためだとしましょう。(によって作成されることもありますが、ユーザーは自分の投稿にコメントできないことに注意してくださいcommentsusercommentspost。論理的には、これは次のように動作するはずです:

これは私にルートを与えるはずです

最初の 2 つは機能しますが、最後の 1 つは機能しません。私は無駄になし_でそれを試しました。comments_received私は次のようなURLを取得しようとしています

私もそれを入れ子にしようとしましたが、多分私はそれを間違っています。その場合、マップは次のようになると思います。

URLは次のようになります。

多分これは正しい方法ですが、構文が間違っていますか?

私はこれについて間違った方法で考えていますか?commentsユーザーのすべての投稿に追加されたすべて のページを取得できるはずだというのは、私には理にかなっているように思えます。

ご協力いただきありがとうございます!

0 投票する
8 に答える
24333 参照

ruby-on-rails - 複数のforeign_keysを持つRailsモデルのhas_many

レールに比較的新しく、名前、性別、father_id、mother_id (2 つの親) を持つ単一の Person モデルで非常に単純な家系の「ツリー」をモデル化しようとしています。以下は基本的に私がやりたいことですが、明らかに has_many で :children を繰り返すことはできません (最初のものは上書きされます)。

2 つの外部キーで has_many を使用する簡単な方法はありますか、またはオブジェクトの性別に基づいて外部キーを変更する方法はありますか? または、別の/より良い方法がありますか?

ありがとう!

0 投票する
9 に答える
22112 参照

ruby-on-rails - has_many :through 関係で重複を避ける方法は?

どうすれば次のことを達成できますか? 2 つのモデル (ブログとリーダー) と、モデル間に N:M の関係を持たせるための JOIN テーブルがあります。

私が今やりたいことは、さまざまなブログに読者を追加することです。ただし、読者をブログに追加できるのは 1 回だけという条件があります。したがって、テーブルに重複 (同じreaderID、同じblogID)があってはなりません。BlogsReadersどうすればこれを達成できますか?

2 番目の質問は、読者がまだ購読していないブログのリストを取得するにはどうすればよいですか (たとえば、ドロップダウン選択リストを埋めて、読者を別のブログに追加するために使用できます)。

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

ruby-on-rails - ユーザーにhas_many:throughテーブルをユーザー入力属性なしで作成させるにはどうすればよいですか?

2つのモデル(ユーザーとコース)と、コースへの登録を可能にするJOINテーブルがあります。

登録JOINテーブルには、成績、完了率などの他の属性があります。ただし、登録以外の属性には、ユーザーからの入力は必要ありません。理想的にはnew_course_enrollment(@course, {:user_id => current_user} )、バックグラウンドで登録を作成し(ユーザーが何も入力する必要がない)、「登録」リンクを「登録済み」ステータスに置き換えてコースページにリダイレクトするリンクが必要です。デフォルトのRESTfulEnrollments#newコントローラーアクションを変更せずに、モデルでこれを行う方法はありますか?

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

ruby-on-rails - has_many :finder_sql パラメータに文字列を渡すにはどうすればよいですか?

私のアプリケーションでは、ユーザーは has_many チケットを持っています。残念ながら、チケット テーブルには user_id がなく、user_login があります (レガシー データベースです)。いつか変更する予定ですが、今のところ、この変更には多くの影響があります。

では、ログイン列を介して「user has_many :tickets」関連付けを作成するにはどうすればよいでしょうか?

次の finder_sql を試しましたが、うまくいきません。

奇妙なエラーが発生します:

このfinder_sqlも試しました(ログインを二重引用符で囲みます):

しかし、それは同じように失敗します (とにかく、それが機能したとしても、SQL インジェクションに対して脆弱です)。

テスト データベースで、チケット テーブルに user_id 列を追加し、次の finder_sql を試しました。

これで問題なく動作します。どうやら、私の問題は、使用しようとしているユーザー列がIDではなく文字列であるという事実に関係しています。

かなり長い間ネットを検索しました...しかし、手がかりは見つかりませんでした。

任意のパラメーターを finder_sql に渡して、次のように記述できるようにしたいと考えています。

編集: has_many 関連付けの :foreign_key パラメータを使用できません。ユーザー テーブルには、アプリケーションの他の場所で使用される id 主キー列があるためです。

編集#2:ドキュメントを十分に読んでいないようです.has_many関連付けは、:primary_keyパラメーターを使用して、ローカルの主キー(デフォルトID)である列を指定できます。ダニエル、目を開けてくれてありがとう!私はそれが私の元の質問に答えていると思います:

しかし、 has_many :tickets_since_subscription 関連付けを機能させる方法を知りたいです。

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

ruby-on-rails - Rails has_many :結合モデルの追加属性による検索を介して

Ruby と Rails はどちらも初心者ですが、今では本で教育を受けています (これはどうやら何の意味もありませんね、笑)。

テーブル EventUser を介して結合された Event と User の 2 つのモデルがあります。

このプロジェクトはカレンダーであり、特定のイベントにサインアップして名前を書き留める人々を追跡する必要があります。多対多は良いアプローチだと思いますが、次のようなことはできません。

イベントは実際にはその余分なデータを持っていないため、EventUser モデルは持っています。そして、私ができる間:

これは「レールウェイ」に反するようです。これは今夜(今朝)長い間私を悩ませてきましたか?

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

ruby-on-rails - has_many からエレガントに属性を選択:Rails の結合モデルを通じて

has_many :through アソシエーションの結合モデルから属性を選択する最も簡単でエレガントな方法は何だろうと思っています。

次の Item クラスを持つ Item、Catalog、および CatalogItems があるとします。

さらに、CatalogueItems に position 属性があり、任意のカタログと任意のアイテムの間に CatalogueItem が 1 つしかないとします。

位置属性を取得するための最も明白ですが、少しイライラする方法は次のとおりです。

@item.catalogs.first.position を実行できるように見えるので、これは面倒です。これは、必要な位置 (@item の最初のカタログに対応する位置) を完全に指定したためです。

これを取得するために私が見つけた唯一の方法は次のとおりです。

これで、Item.catalogs.first.position を実行できます。ただし、これはちょっとしたハックのように思えます。Catalog インスタンスに追加の属性を追加しています。また、@catalogs に Catalog.find または @item.catalogs を入力する 2 つの異なる状況でビューを使用しようとする可能性も開きます。ポジションが存在する場合もあれば、存在しない場合もあります。

誰もこれに対する良い解決策を持っていますか?

ありがとう。