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

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

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

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

Ruby on Rails 6

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

解決済

paramsでidを取得したいが、string型として扱われる

pure_dorayaki
pure_dorayaki

総合スコア6

Ruby

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

Ruby on Rails 6

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

1回答

0グッド

0クリップ

202閲覧

投稿2022/12/03 04:46

前提

paramsでidを取得したいのですが、型がstringとして取得されてしまうので、bigintにしたいです。
(いいね機能(visit)を作成しています)

発生している問題・エラーメッセージ

# ターミナル ActiveRecord::AssociationTypeMismatch (Restaurant(#99540) expected, got "17" which is an instance of String(#3520)):

該当のソースコード

rb

1ビュー 2<%= button_to '行ってない', restaurant_visits_path(restaurant.id), method: :post, class: "btn btn-sm btn-accent" %>

rb

1コントローラー 2class VisitsController < ApplicationController 3 def create 4 current_user.visit(params[:restaurant_id]) 5 end 6end

rb

1userモデル 2 3 has_many :visits, dependent: :destroy 4 has_many :visited_rst, through: :visits, source: :restaurant 5 6~ 省略 ~ 7 8 def visit(restaurant) 9 visited_rst << restaurant 10 end

試したこと

コントローラーでbinidng.pryで確かめても"restaurant_id"=>"17"} となっています。

2: def create 3: binding.pry => 4: current_user.visit(params[:restaurant_id]) 5: end [1] pry(#<VisitsController>)> params => #<ActionController::Parameters {"authenticity_token"=>"fKJNJhVfpX13u6Y_Dg9_-oYVHcOxxlx2F-Tp5-Ad87dylLlEgwccYWSUegM-ZnRSWLKqTMCVb4DaSD3jgPuZkQ", "controller"=>"visits", "action"=>"create", "restaurant_id"=>"17"} permitted: false>

調べ方もよく分からないので、ご助言いただきたいです。
よろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

ruby 3.1.2
rails 6.1.6

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答1

0

ベストアンサー

visited_rst << restaurantとして追加できるものは、Restaurantモデルインスタンスです。文字列でも数値でもありません。

Restaurant.findで必要なモデルを検索しましょう。

投稿2022/12/03 04:49

maisumakun

総合スコア141339

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

pure_dorayaki

2022/12/03 06:00

ご返信ありがとうございます! コントローラーを修正し、無事うまく動きました。 お助けて頂きまして、ありがとうございます! ```visits_controller.rb def create @restaurants = Restaurant.find(params[:restaurant_id]) current_user.visit(@restaurants) redirect_to request.referer end ```

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Ruby

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

Ruby on Rails 6

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