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

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

5
Active Record、Rails、Postgresで複数の重複フィールドを持つ行を検索する
PostgresとActiverecordを使用して複数の列にわたって重複する値を持つレコードを見つけるための最良の方法は何ですか? 私はこの解決策をここで見つけました: User.find(:all, :group => [:first, :email], :having => "count(*) > 1" ) しかし、それはpostgresでは動作しないようです。私はこのエラーを受け取ります: PG :: GroupingError:エラー:列 "parts.id"はGROUP BY句に出現するか、集計関数で使用する必要があります

6
モデルでヘルパーを使用する:ヘルパーの依存関係を含めるにはどうすればよいですか?
テキスト領域からのユーザー入力を処理するモデルを書いています。http://blog.caboo.se/articles/2008/8/25/sanitize-your-users-html-inputからのアドバイスに従って、before_validateを使用して、データベースに保存する前にモデルの入力をクリーンアップしています折り返し電話。 モデルの関連部分は次のようになります。 include ActionView::Helpers::SanitizeHelper class Post < ActiveRecord::Base { before_validation :clean_input ... protected def clean_input self.input = sanitize(self.input, :tags => %w(b i u)) end end 言うまでもなく、これは機能しません。新しい投稿を保存しようとすると、次のエラーが表示されます。 undefined method `white_list_sanitizer' for #<Class:0xdeadbeef> どうやら、SanitizeHelperはHTML :: WhiteListSanitizerのインスタンスを作成しますが、モデルに混ぜると、HTML :: WhiteListSanitizerが見つかりません。どうして?これを修正するにはどうすればよいですか?

13
ActiveRecord.find(array_of_ids)、順序を保持
Something.find(array_of_ids)Railsで行う場合、結果の配列の順序はの順序に依存しませんarray_of_ids。 注文を見つけて保存する方法はありますか? ATM私はIDの順序に基づいて手動でレコードをソートしますが、それはちょっと不自然です。 UPD::orderparamとなんらかのSQL句を使用して順序を指定できる場合は、どうすればよいですか?

10
関連付けのカウントがゼロより大きいすべてのレコードを検索します
簡単だと思ったことをしようとしていますが、簡単ではないようです。 多くの空席があるプロジェクトモデルがあります。 class Project < ActiveRecord::Base has_many :vacancies, :dependent => :destroy end 少なくとも1つの空席があるすべてのプロジェクトを取得したいと考えています。私はこのようなものを試しました: Project.joins(:vacancies).where('count(vacancies) > 0') しかしそれは言う SQLite3::SQLException: no such column: vacancies: SELECT "projects".* FROM "projects" INNER JOIN "vacancies" ON "vacancies"."project_id" = "projects"."id" WHERE ("projects"."deleted_at" IS NULL) AND (count(vacancies) > 0)。


4
Railsで属性の元の値を取得する方法
ActiveRecord属性の元の値(=データベースからロードされた値)を取得する方法はありますか? このようなものをオブザーバーに入れたい before_save object do_something_with object.original_name end タスクは、更新時にオブジェクトをハッシュテーブルから削除する(実際には、オブジェクトをテーブル内の別のキーに移動する)ことです。

4
Mongoidおよびmongodbとの関係を介してhas_many:を実装する方法は?
Railsガイドのこの変更例を使用して、mongoidを使用してリレーショナル「has_many:through」関連付けをどのようにモデル化しますか? 問題は、mongoidがActiveRecordのようにhas_many:throughをサポートしないことです。 # doctor checking out patient class Physician < ActiveRecord::Base has_many :appointments has_many :patients, :through => :appointments has_many :meeting_notes, :through => :appointments end # notes taken during the appointment class MeetingNote < ActiveRecord::Base has_many :appointments has_many :patients, :through => :appointments has_many :physicians, :through => :appointments end # the patient …

8
after_saveでレコードが作成または更新されたかどうかを確認する方法
#new_record?関数は、レコードが保存されているかどうかを判断します。ただし、after_saveフックでは常にfalse です。レコードが新しく作成されたレコードであるか、更新から古いレコードであるかを判別する方法はありますか? before_createモデルにフラグを設定したり、データベースに別のクエリを要求したりするなど、別のコールバックを使用しないことを望んでいます。 任意のアドバイスをいただければ幸いです。 編集:それを決定する必要がafter_saveフック、そして私の特定のユースケースのため、ノーがあるupdated_atか、updated_onタイムスタンプ

2
Rails 4でhas_many:through:uniqを使用する際の非推奨警告
Rails 4では、has_many:throughで:uniq => trueを使用すると非推奨の警告が導入されました。例えば: has_many :donors, :through => :donations, :uniq => true 次の警告が表示されます。 DEPRECATION WARNING: The following options in your Goal.has_many :donors declaration are deprecated: :uniq. Please use a scope block instead. For example, the following: has_many :spam_comments, conditions: { spam: true }, class_name: 'Comment' should be rewritten as the …

5
オブジェクトの配列を属性値でフィルタリングするRails
だから私はデータベースにクエリを実行し、オブジェクトの完全な配列を持っています: @attachments = Job.find(1).attachments 今私は、オブジェクトの配列を持っていることを私は別のDBクエリを実行する必要はありませんが、私はに基づいて、配列をフィルタリングしたいAttachmentオブジェクトのfile_type私がのリスト持つことができるようにattachments、ファイルの種類がどこにあるか'logo'との、その後別のリストattachmentsファイルタイプは'image' このようなもの: @logos = @attachments.where("file_type = ?", 'logo') @images = @attachments.where("file_type = ?", 'image') しかし、dbクエリの代わりにメモリ内。

8
レコードがない場合にnilを指定してfind()
私のようなものを使用するときの私の現在のレールプログラムで user = User.find(10) ID = 10のユーザーがいない場合、次のような例外があります。 ActiveRecord::RecordNotFound: Couldn't find User with ID=10 例外を発生させる代わりにnilを取得できますか? unless user = Challenge.find(10) puts "some error msg" end レコードがないときにnilを取得したいだけで、begin / rescueを使用したくない ありがとう

1
レールの2つの列に一意のインデックスを実装する方法
テーブルがあり、2つの列に一意のインデックスを追加しようとしています。これらの列にもインデックスが付けられます。だから私の質問は、1つの列だけのインデックスを削除できるのか、それとも3つのインデックスすべてを使用する必要があるのか​​です。 add_index "subscriptions", ["user_id"] add_index "subscriptions", ["content_id"] add_index "subscriptions", ["user_id"], ["content_id"], :unique => true

3
has_manyにレコードを追加する方法:railsの関連付けを介して
class Agents << ActiveRecord::Base belongs_to :customer belongs_to :house end class Customer << ActiveRecord::Base has_many :agents has_many :houses, through: :agents end class House << ActiveRecord::Base has_many :agents has_many :customers, through: :agents end どのようにAgentsモデルに追加しCustomerますか? これは最善の方法ですか? Customer.find(1).agents.create(customer_id: 1, house_id: 1) 上記はコンソールからは問題なく動作しますが、実際のアプリケーションでこれを実現する方法はわかりません。 house_id入力としても使用されるフォームが顧客のために入力されていると想像してください。次に、コントローラで以下を実行しますか? def create @customer = Customer.new(params[:customer]) @customer.agents.create(customer_id: @customer.id, house_id: params[:house_id]) @customer.save end …


1
Railsはデータベースに対して実行されたマイグレーションをどのように追跡しますか?
Rails docによると:http : //guides.rubyonrails.org/migrations.html 「アクティブレコードは、どのマイグレーションがすでに実行されているかを追跡するため、ソースを更新してrake db:migrateを実行するだけです。」 ActiveRecordは実際にどのようにこれを行いますか?Active Recordはどこにデータを保存しますか? これはデータベース自体に格納されているのではないでしょうか?どこかのテーブルに。 私の開発マシンでは、すべての移行を実行しました。次に、mysqldumpを使用して本番データベースをコピーしました。次に、「rake db:migrate:status」を実行したところ、本番データベースで実行する必要がある移行が正しく表示されます。 私は以前、ActiveRecordがタイムスタンプを使用して最後の移行実行を追跡していると思っていました。しかし、ActiveRecordは別のコードブランチからマージされた「古い」移行を正しく実行するため、これは正しくないと思います。 この手の込んだ知識を持つ誰かができますか?ありがとう

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.