質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

1748閲覧

undefined method `sort!'  rails6 破壊的sortについて

jnpps

総合スコア4

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2021/09/24 08:05

Rails6にバージョンを上げた際に以下のエラーが発生しました。

NoMethodError (undefined method `sort!' for #<ItemGroup::ActiveRecord_AssociationRelation:0x000055dce8d83770> Did you mean? sort):

エラー箇所は以下になります。

ruby

1 def prepare_selections 2 @item_groups = @cc.item_groups.actives 3 @item_groups = @item_groups.where("item_groups.id not in (?)", @item_group.self_and_descendant_ids) if @item_group && @item_group.id 4 @item_groups.sort!{|a, b| a.fullpath <=> b.fullpath} 5 end

いろいろと調べて

Rails3では元のリレーションが配列の派生であるため、sort!でレシーバそのもののインスタンスに対して処理できたのに対し、Rails5ではリレーションオブジェクト自体はデータを持っていないため、sort!でレシーバに操作しようとするとエラーになっていた(そのため、代入演算子で再度データを定義する必要がある)

Railsのsortの戻り値について

ということがわかったのですが、具体的にどう修正すればよいのかがわかりません。
どなたかご教授いただければ幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

fullpathデータベースの列なのであれば、orderでソートしてしまうのがいちばん合理的です。

ruby

1@item_groups = @item_groups.order(:fullpath)

投稿2021/09/24 08:09

maisumakun

総合スコア145208

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2021/09/24 08:11

そうでない場合、「@item_groupsがリレーションでなければならない」のか「@item_groupsが配列になっても問題ないのか」で、やるべきことが違ってきます。
jnpps

2021/09/30 05:47

ありがとうございます。 無事解決できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問