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

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

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

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

Q&A

解決済

1回答

1717閲覧

Rails4.2 主キーをuuidにした場合にroutesのidがintで表示される

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby on Rails

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

0グッド

0クリップ

投稿2015/07/01 09:18

編集2015/07/01 11:49

Todo model Navi modelがあり、navi modelの主キーはuuidになっています。
Todo modelから対応するnavi(show)へ飛ぶリンクを踏むと下記のエラーになっていまいます。

因みにuuidにする前は表示されていましたし、navi_idのuuidを直接URLに打ち込めばちゃんと表示されます。

![イメージ説明]WIDTH:600

リンク

lang

1 <a href="<%= navi_url(todo.navi_id) %>" class="list-group-item"></a>

アソシエーション
has_one :todo
belongs_to :navi

uuidは入っている

lang

1[5] pry(main)> Todo.all 2 Todo Load (0.8ms) SELECT "todos".* FROM "todos" 3=> [#<Todo:0x007ffaabddf3a8 4 id: 1, 5 navi_id: "85d9e606-b068-4e15-b94d-79eb470013fa", 6 created_at: Wed, 01 Jul 2015 18:04:55 JST +09:00, 7

migrate

lang

1class CreateTodos < ActiveRecord::Migration 2 def change 3 create_table :todos do |t| 4 t.uuid :navi_id 5 t.timestamps 6 end 7 8 end 9end

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

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

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

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

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

chiku_

2015/07/01 10:13

navi_urlってrailsの標準メソッドでないと思いますが、navi_url内で何をしているか分かりませんか?
退会済みユーザー

退会済みユーザー

2015/07/01 10:34

すいません、私の理解が追いついていないのですが、item modelがあったとしたらitem_urlとかitem_pathとかが標準メソッドで追加されると思うのですがそれと同じではないのでしょうか・・?
chiku_

2015/07/01 10:47

ああ、すいません、失礼しました。
guest

回答1

0

ベストアンサー

うまいことリンクのURLが生成されていないようですね。
エラーページのリクエストURLはどうなっていますか?

投稿2015/07/01 10:59

rifuch

総合スコア1901

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

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

退会済みユーザー

退会済みユーザー

2015/07/01 11:47 編集

http://0.0.0.0:3000/navis/85になっていて ログはParameters: {"id"=>"85"}となっています。 uuidは id: "85d9e606-b068-4e15-b94d-79eb470013fa",で最初の85までしか取れていません
rifuch

2015/07/01 12:03

調べたところ、特にコードに問題はなさそうなのですが、一点、気になったので試してみてほしいことがあります。 整数にパースされている可能性はないでしょうか? navi_url(todo.navi_id.to_s) としてみてください
退会済みユーザー

退会済みユーザー

2015/07/01 12:33

ありがとうございます。navi_url(todo.navi_id.to_s)で試してみましたが同じでした。 migrateについてですが t.uuidであっていますでしょうか?stringだとどうなるのかなと思いまして
rifuch

2015/07/01 12:47

postgresのuuid型を使ったことがないので、さっと読んだドキュメントから推測するに、 migrateでuuid型にセットすることで、'uuid_generate_v4()'で生成されると同時に、正規表現でのバリデーションもかかるようですから、migrateのところはt.uuidが正解なのだと思います。 URLヘルパのところで何か起こっているのかと思い、to_params周辺を見てみたのですが、整数にパースするような動作は無いようです。 (URLヘルパへの引数は、to_param(to_sのエイリアス。AcivieRecordでは.idをコール)で文字列に変換される用なので、ここはシロみたいです) 実際にtodo.navi_idの中身がどうセットされているか、レンダラ上か、ログにはき出して中身を見てみては?
退会済みユーザー

退会済みユーザー

2015/07/01 13:07

ごめんなさい、IDEを再起動したら問題なくアクセスできました。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問