読者です 読者をやめる 読者になる 読者になる

みかづきメモ

学習したことのメモとか、日記とか、備忘録。

find_by_sql でも preload したい

ActiveRecord のクエリじゃきついような時、 find_by_sql を使うと思うのですが、
こっちは preload ができないのでしたかった。

ちなみに Rails 5 です。

users = User.find_by_sql(["SELECT * FROM ...", id])
ActiveRecord::Associations::Preloader.new.preload(users, [:posts, :job])
users # <= Preload されたやつ

参考:

Rails で ROLLBACK された理由が知りたい

レコード作成時、なにも COMMIT されなかったり ROLLBACK されたりして、
理由がわからなかったので調べる方法。

song = Song.new(title: "恋愛サーキュレーション")
song.save # -> ROLLBACK
logger.debug song.errors.inspect  # -> {message: "すでにあるよ"}

よく考えれば、普通に View のほうでは errors を表示してたりするので、
初めからこれをみればよかった

UWP アプリから、ストアアプリのレビュー画面を開きたい

アプリの設定とかから、「気に入ったらレビューしてね!」みたいなのを追加したかった。
以下のようにすることで起動できます。

await Launcher.LaunchUriAsync(new Uri($"ms-windows-store:REVIEW?PFN={Package.Current.Id.FamilyName}"));

ちなみに、 MSDNms-windows-store スキームについての説明ページがありました。

docs.microsoft.com

Rails でエラーメッセージを良い感じにしたい

rails-i18n を入れてくれるとだいたい良い感じにしてくれるんですけども、
「なんかちがうんよー」みたいな時もあります。

例えば、次のようなとき:

# attachment.rb
class Attachment
  belongs_to :illust

  mount_uploader :file, ImageUploader
end

# illust.rb
class Illust
  has_many :attachments

  validates :attachments, length: {in: 1..10} # 10枚まで
end

f:id:MikazukiFuyuno:20170223221627p:plain:w300

と、エラーメッセージは画像のようになっちゃいます。
それだと意味不明で困るので、下のようにすれば良い感じになります✨️

ja:
  activerecord:
    attributes:
      illust:
        attachments: "添付ファイル"

    errors:
      models:
        illust:
          attributes:
            attachments:
              too_short: "は%{count}枚以上必要です。"

f:id:MikazukiFuyuno:20170223221519p:plain:w300

やったね。

ちなみに、バリデーションエラーのキーは、ここをみるといいかも。

rails-i18n/ja.yml at master · svenfuchs/rails-i18n · GitHub

Ruby で匿名クラスをつくりたい

匿名クラスを作りたかった。

@ninomiya = Class.new do
  attr_accessor :asuka
end.new
@ninomiya.asuka = "かわいい"

参考: