タグ付けされた質問 「activerecord」

Active Recordは、ドメインロジックとストレージアブストラクションを1つのオブジェクトに組み合わせたパターンです。パターンに関する質問にはこのタグを使用し、Rails ORMフレームワークに関する質問には[rails-activerecord]を使用します。

7
Railsは魔法を作成または更新しますか?
CachedObjectキーでインデックス付けされた一般的なシリアル化されたオブジェクトを格納するというクラスがあります。このクラスにcreate_or_updateメソッドを実装してほしい。オブジェクトが見つかった場合は更新され、それ以外の場合は新しいオブジェクトが作成されます。 Railsでこれを行う方法はありますか、または独自のメソッドを記述する必要がありますか?


6
Railsの1回の呼び出しで複数のオブジェクトを保存する
私はレールの中で次のようなことをしているメソッドを持っています: a = Foo.new("bar") a.save b = Foo.new("baz") b.save ... x = Foo.new("123", :parent_id => a.id) x.save ... z = Foo.new("zxy", :parent_id => b.id) z.save 問題は、追加するエンティティが増えるほど、時間がかかることです。これは、すべてのレコードについてデータベースにアクセスする必要があるためと考えられます。ネストされているため、親を保存する前に子を保存できないことはわかっていますが、一度にすべての親を保存してから、すべての子を保存したいと思います。次のようなことをするのがいいでしょう: a = Foo.new("bar") b = Foo.new("baz") ... saveall(a,b,...) x = Foo.new("123", :parent_id => a.id) ... z = Foo.new("zxy", :parent_id => b.id) saveall(x,...,z) それは、たった2つのデータベースヒットでそれをすべて行います。これをレールで行う簡単な方法はありますか、それとも一度に1つずつ行うのが難しいのですか?


7
Railsのコントローラーからレコードが存在するかどうかを確認します
私のアプリでは、ユーザーはビジネスを作成できます。彼らindexが私のBusinessesController中でアクションをトリガーしたとき、私はビジネスがに関連しているかどうかを確認したいと思いcurrent_user.idます: はいの場合:ビジネスを表示します。 いいえの場合:newアクションにリダイレクトします。 私はこれを使おうとしていました: if Business.where(:user_id => current_user.id) == nil # no business found end しかし、ビジネスが存在しない場合でも、常にtrueを返します... データベースにレコードが存在するかどうかをテストするにはどうすればよいですか?

13
ActiveRecordクエリユニオン
Ruby on Railのクエリインターフェイスを使用して、(少なくとも私には)いくつかの複雑なクエリを記述しました。 watched_news_posts = Post.joins(:news => :watched).where(:watched => {:user_id => id}) watched_topic_posts = Post.joins(:post_topic_relationships => {:topic => :watched}).where(:watched => {:user_id => id}) これらのクエリはどちらもそれ自体で正常に動作します。どちらもPostオブジェクトを返します。これらの投稿を1つのActiveRelationに結合したいと思います。ある時点で数十万の投稿が存在する可能性があるため、これはデータベースレベルで行う必要があります。MySQLクエリの場合、単純にUNION演算子を使用できます。RoRのクエリインターフェイスで同様のことができるかどうか誰かが知っていますか?

5
クエリのような安全なActiveRecord
LIKEクエリを作成しようとしています。 純粋な文字列のクエリは安全ではないことを読みましたが、安全なLIKEハッシュクエリの記述方法を説明するドキュメントは見つかりませんでした。 出来ますか?SQLインジェクションに対して手動で防御する必要がありますか?


8
LEFTOUTERがRails3に参加
私は次のコードを持っています: @posts = Post.joins(:user).joins(:blog).select これは、すべての投稿を検索し、それらと関連するユーザーおよびブログを返すことを目的としています。ただし、ユーザーはオプションです。つまり、INNER JOIN、:joins生成大量のレコードを返しません。 これを使用してLEFT OUTER JOIN代わりに生成するにはどうすればよいですか?

4
Rails 3.0のArelとは正確には何ですか?
ActiveRecordの代わりであり、クエリの代わりにオブジェクトを使用することを理解しています。 だが... なぜこれが良いのですか? オブジェクト/クエリは「簡単に」作成できますか? それはより効率的なSQLクエリにつながりますか? すべての主要なDBと互換性がありますか?-そうなると思います。 ストアドプロシージャでの使用は簡単/困難ですか?

5
RoR4で検証された正規表現
次のコードがあります。 class Product < ActiveRecord::Base validates :title, :description, :image_url, presence: true validates :price, numericality: {greater_than_or_equal_to: 0.01} validates :title, uniqueness: true validates :image_url, allow_blank: true, format: { with: %r{\.(gif|jpg|png)$}i, message: 'URL must point to GIT/JPG/PNG pictures' } end それは動作しますが、「rake test」を使用してテストしようとすると、次のメッセージが表示されます。 rake aborted! The provided regular expression is using multiline anchors (^ …

10
Rails:最後にnullで注文する
私のRailsアプリで、他の人がどのように解決するか知りたいという問題に何度か遭遇しました。 値がオプションである特定のレコードがあるため、一部のレコードには値があり、一部のレコードはその列に対してnullです。 一部のデータベースでその列で並べ替えると、nullが最初に並べ替えられ、一部のデータベースではnullが最後に並べ替えられます。 たとえば、コレクションに属している場合と属していない場合がある写真があります。つまり、どこcollection_id=nilにあるか、どこにあるかcollection_id=1などの写真があります。 私が行う場合はPhoto.order('collection_id desc)SQLiteの上で、私はヌルが最後に取得するが、PostgreSQLの私の最初のヌルを取得します。 これを処理し、任意のデータベースで一貫したパフォーマンスを実現するための、優れた標準のRailsの方法はありますか?

6
レコードがレールで破壊されたかどうかを確認します
だからあります record.new_record? 何かが新しいかどうかを確認するには 何かが途中にあるかどうかを確認する必要があります。 record = some_magic record.destroy record.is_destroyed? # => true そんな感じ。破壊するとオブジェクトがフリーズするので、フリーズしますか?ある種の作業ですが、このタスクに明示的に何かありますか?

9
ActiveRecordを使用して、after_update中にレコードの古い値を取得する方法はありますか
簡単な例を使用したセットアップは:私は1つのテーブル(持っているTotalsの合計保持)amount第二の表の各レコードの列を(Things)。 thing.amountが更新されたら、古い値と新しい値の差をに追加したいと思いますtotal.sum。 今、私はself.amount中に減算しbefore_update、中に加算self.amountしていafter_updateます。これにより、更新の成功に対する信頼が非常に高くなります。 制約: すべてのトランザクションの合計を単純に再計算したくありません。 質問:簡単に言うと、after_updateコールバック中に元の値にアクセスしたいと思います。これを行うにはどのような方法がありますか? 更新: LukeFranclのアイデアを採用します。after_updateコールバック中も、self.attr_wasまさに私が望んでいた値にアクセスできます。またafter_update、この種のロジックをモデルに保持したいので、実装を採用することにしました。このようにして、将来どのようにトランザクションを更新することにしたとしても、トランザクションの合計を正しく更新していることがわかります。実装の提案をしてくれた皆さんに感謝します。

3
Railsのhas_many関係でデフォルトでスコープを使用する
次のクラスがあるとしましょう class SolarSystem < ActiveRecord::Base has_many :planets end class Planet < ActiveRecord::Base scope :life_supporting, where('distance_from_sun > ?', 5).order('diameter ASC') end Planetスコープlife_supportingとSolarSystem has_many :planets。にsolar_system関連付けられているすべてのを要求するとplanets、life_supportingスコープが自動的に適用されるように、has_many関係を定義したいと思います。基本的に、私は欲しいですsolar_system.planets == solar_system.planets.life_supporting。 要件 私はないではない変更するscope :life_supportingにPlanetします default_scope where('distance_from_sun > ?', 5).order('diameter ASC') また、追加する必要がないので重複を防ぎたい SolarSystem has_many :planets, :conditions => ['distance_from_sun > ?', 5], :order => 'diameter ASC' ゴール のようなものが欲しいのですが …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.