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

Ruby on RailsフレームワークのActive Recordパターンを使用したオブジェクトリレーショナルマッピング(ORM)の実装。

26
ActiveRecordにデフォルト値を設定するにはどうすればよいですか?
ActiveRecordにデフォルト値を設定するにはどうすればよいですか? 私は、コードの醜い、複雑なチャンクを説明Pratikからの投稿を参照してください。http://m.onkey.org/2007/7/24/how-to-set-default-values-in-your-model class Item < ActiveRecord::Base def initialize_with_defaults(attrs = nil, &block) initialize_without_defaults(attrs) do setter = lambda { |key, value| self.send("#{key.to_s}=", value) unless !attrs.nil? && attrs.keys.map(&:to_s).include?(key.to_s) } setter.call('scheduler_type', 'hotseat') yield self if block_given? end end alias_method_chain :initialize, :defaults end 次の例がぐるぐる見たことがあります。 def initialize super self.status = ACTIVE unless self.status end そして def …

11
activerecordレコードを複製する最も簡単な方法は何ですか?
(idに加えて)プロセス内の単一のフィールドを変更して、activerecordレコードのコピーを作成します。これを達成する最も簡単な方法は何ですか? 新しいレコードを作成し、フィールドごとにデータをコピーして各フィールドを反復処理できることに気付きましたが、これを行う簡単な方法があるはずだと思いました... といった: @newrecord=Record.copy(:id) *perhaps?*



5
Rubyクラスの名前を取得するにはどうすればよいですか?
ActiveRecordオブジェクトからクラス名を取得するにはどうすればよいですか? 私が持っています: result = User.find(1) 私は試した: result.class # => User(id: integer, name: string ...) result.to_s # => #<User:0x3d07cdc>" 文字列で(Userこの場合は)クラス名だけが必要です。その方法はありますか? これはかなり基本的なことはわかっていますが、RailsとRubyの両方のドキュメントを検索しましたが、見つかりませんでした。

4
保存せずにRails update_attributes?
レコードを保存しないupdate_attributesの代替はありますか? だから私は次のようなことをすることができます: @car = Car.new(:make => 'GMC') #other processing @car.update_attributes(:model => 'Sierra', :year => "2012", :looks => "Super Sexy, wanna make love to it") #other processing @car.save ところで、私はできることを知っていますが@car.model = 'Sierra'、すべてを1行で更新したいと思います。

5
NOT NILを使用した状態のレール
rails 3スタイルを使用して、私はどのように反対のことを書けますか? Foo.includes(:bar).where(:bars=>{:id=>nil}) idがnilでない場所を見つけたいのですが。私は試した: Foo.includes(:bar).where(:bars=>{:id=>!nil}).to_sql しかし、それは戻ります: => "SELECT \"foos\".* FROM \"foos\" WHERE (\"bars\".\"id\" = 1)" これは間違いなく私が必要としているものではなく、ARelのバグのように見えます。

8
Rails:include対:joins
これは、「これを行う方法がわからない」という質問ではなく、「なぜこのように機能するのか」という質問です。 したがって、使用することがわかっている関連レコードをプルするという福音は:include、結合を取得して余分なクエリの全体を回避するために使用することです。 Post.all(:include => :comments) ただし、ログを見ると、結合は行われていません。 Post Load (3.7ms) SELECT * FROM "posts" Comment Load (0.2ms) SELECT "comments.*" FROM "comments" WHERE ("comments".post_id IN (1,2,3,4)) ORDER BY created_at asc) すべてのコメントを一度にプルするのでショートカットを取っていますが、それはまだ結合ではありません(すべてのドキュメントが言っているようです)。結合を取得できる唯一の方法は、次の:joins代わりに使用することです:include。 Post.all(:joins => :comments) そしてログは示しています: Post Load (6.0ms) SELECT "posts".* FROM "posts" INNER JOIN "comments" ON "posts".id = "comments".post_id 何か不足していますか?私は6ダースの関連付けを持つアプリを持っていて、1つの画面にそれらすべてのデータを表示します。6人の個人ではなく、1つの結合クエリを使用する方がよいようです。パフォーマンスに関しては、個々のクエリよりも結合を行う方が常に良いとは限らないことを知っています(実際に時間を費やすと、上記の2つの個々のクエリが結合よりも高速であるように見えます)。私は読んでいますが:include、宣伝どおりに機能していないことに驚いています。 たぶんRails はパフォーマンスの問題を認識していて、特定の場合を除いて参加しませんか?


7
Rails 4に参照列の移行を追加する
ユーザーは多くのアップロードを持っています。をuploads参照するテーブルに列を追加したいuser。移行はどのように見えるべきですか? これが私が持っているものです。(1):user_id, :intと(2)のどちらを使用するかわかりません:user, :references。(2)が機能するかどうかさえわかりません。これを「レール」の方法で実行しようとしています。 class AddUserToUploads < ActiveRecord::Migration def change add_column :uploads, :user_id, :integer end end Rails 3以外の関連する質問。Rails3の移行:参照列を追加しますか?

8
Ruby on Railsはモデルfield:typeを生成します-field:typeのオプションは何ですか?
新しいモデルを生成し、別のモデルのIDを参照するための構文を忘れようとしています。自分で調べますが、Ruby on Railsのすべてのドキュメントリンクの中で、最終的なソースを見つける方法はわかりません。 $ rails g model Item name:string description:text(そしてここではreference:productまたはreferences:product)。しかし、より良い質問は、この種の愚かさを将来どこで、またはどのようにして簡単に探すことができるかです 注:これらのオプションのいずれかを誤って入力して移行を実行すると、 Ruby on Railsがデータベースを完全にrake db:rollback台無しにしてしまい、そのような台無しに対して無力になるという難しい方法を学びました。私は何かを理解していないと確信していますが、私が理解するまでは...によって返された「詳細な」情報はrails g modelまだ私を引っ掻き続けています...

3
ActiveRecordのFloatとDecimal
時々、Activerecordデータタイプは私を混乱させます。エラー、よくあります。私の永遠の質問の1つは、特定のケースについて、 私が使用する必要があります:decimalか:float? 私は頻繁にこのリンクに出くわしました、ActiveRecord::decimal vs:float?、しかし答えは私が確信できるほど明確ではありません: 浮動小数点を使用せず、常に10進数を使用することをお勧めするスレッドがたくさんあります。また、フロートを科学的用途にのみ使用するという提案もいくつかあります。 いくつかのケース例を以下に示します。 ジオロケーション/緯度/経度:-45.756688、120.5777777、... 比率/割合:0.9、1.25、1.333、1.4143、... 私は:decimal以前に使用しましたがBigDecimal、Ruby でオブジェクトを処理することは、フロートに比べて不必要に扱いにくいことに気付きました。:integerたとえば、お金やセントを表すために使用できることもわかっていますが、たとえば、精度が時間の経過とともに変化する可能性がある場合など、他のケースにはあまり適していません。 それぞれを使用する利点/欠点は何ですか? どのタイプを使用するかを知るための良い経験則は何でしょうか?

7
新しいユーザーの作成時にActiveModel :: ForbiddenAttributesError
私はこのモデルをRubyで持っていますが、それは ActiveModel::ForbiddenAttributesError class User < ActiveRecord::Base attr_accessor :password validates :username, :presence => true, :uniqueness => true, :length => {:in => 3..20} VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i validates :email, presence: true, :uniqueness => true, format: { with: VALID_EMAIL_REGEX } validates :password, :confirmation => true validates_length_of :password, :in => 6..20, :on => :create before_save …

15
ActiveRecord / RailsでNOT INクエリを表現する方法は?
Rails 4を使用している場合は、多くの人がこれにアクセスするように思われるため、これを更新するだけで、TrungLêとVinniVidiVicciの回答を確認してください。 Topic.where.not(forum_id:@forums.map(&:id)) Topic.where(published:true).where.not(forum_id:@forums.map(&:id)) 関係しない簡単な解決策があるといいのですがfind_by_sql、そうでなければ機能するはずです。 私はこれを参照するこの記事を見つけました: Topic.find(:all, :conditions => { :forum_id => @forums.map(&:id) }) それは同じです SELECT * FROM topics WHERE forum_id IN (<@forum ids>) 私はそれを行う方法があるかどうか疑問に思っていますNOT IN: SELECT * FROM topics WHERE forum_id NOT IN (<@forum ids>)

6
ActiveRecord:サイズとカウント
Railsでは、Model.sizeおよびの両方を使用してレコード数を見つけることができますModel.count。より複雑なクエリを処理している場合、1つの方法を他の方法よりも使用することの利点はありますか?それらはどう違いますか? たとえば、写真のあるユーザーがいます。ユーザーとユーザーが保持している写真の数の表を表示したい場合、多くのインスタンスを実行するのはuser.photos.sizeより高速か低速user.photos.countか? ありがとう!

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