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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

1110閲覧

レコードの複製について

makox0105

総合スコア65

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/11/12 08:50

編集2020/11/16 09:18

レコードを複製したいのですが、パラメータを引っ張ってきてくれません。

試したこと

RUBY

1def update_new 2 @retrieve_list = RetrieveList.new 3 @retrieve_list = RetrieveList.find(params[:id]).dup 4 @retrieve_list.save 5 end

これを試しにSHOW画面に書いてみました。

RUBY

1 def show 2 @retrieve_list = RetrieveList.new 3 @retrieve_list = RetrieveList.find(params[:id]).dup 4 @retrieve_list.save 5 end

これだとLink_toでIDを引っ張ってきてくれました。
しかしshow画面に行くたびに複製され、えらいことになります。
理想は前者でIDを引っ張ってきてくれれば成功しそうなのですが…。

これらのヒントで何かご教示できる方いましたら、宜しくお願いいたします。

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

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

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

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

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

maisumakun

2020/11/12 09:09

update_newをどのように呼び出していますか?
makox0105

2020/11/12 09:13

EDITと同じようにSHOW画面にボタン作って、 <%= link_to "複製", update_new_retrieve_lists_url(@retrieve_list), :class => 'btn btn-default' %> といいうような感じです。
guest

回答1

0

ベストアンサー

link_toで単にページ遷移するだけではパラメーターは送られませんので、params.require(:retrieve_list)が存在せずエラーとなります。

投稿2020/11/12 09:16

maisumakun

総合スコア146018

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

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

maisumakun

2020/11/12 09:18

単純に複製したいだけなら、IDから引いてきたモデルオブジェクトをdupすればコピーできますので、それをsaveしてください。
makox0105

2020/11/12 09:42

ご回答ありがとうございます。イメージ的には別名で保存のニュアンスに近いです。なのでページを引っ張ってきてそれを違うIDで保存といった具合です。dupでもできますか?
maisumakun

2020/11/12 09:59

> ページを引っ張ってきて これは「ページから値を供給して」という意味でしょうか?
makox0105

2020/11/12 10:04

はい、そうなります。
maisumakun

2020/11/12 10:06 編集

でしたら、その「値を供給する」フォームも作成する必要があります(逆にdupは不要です)。
makox0105

2020/11/12 10:08

一応別のフォームがupdate_newなんです。Editとは分けています。
makox0105

2020/11/12 10:11

ちなみにfindで特定のページを引っ張ってくることはできました。SHOWで選択したレコードを持ってくることができないんです。
maisumakun

2020/11/12 10:51

> 一応別のフォームがupdate_newなんです では、link_toでGETするのではフォームが無意味になります。submitボタンの配置に切り替えてみましょう。
makox0105

2020/11/13 03:14

submitでどう書くと良いのでしょうか?何から何まで聞いてしまってすみません。
maisumakun

2020/11/13 03:38

フォーム全体を書いていただけますか?
makox0105

2020/11/13 03:51

フォーム追記しました。SHOW画面の一番下の複製ボタンがうまくいかないです。
maisumakun

2020/11/13 03:52

えっと、データを送信するためのフォーム要素は1つもないのですか?
makox0105

2020/11/13 04:05

一応送信するフォームがupdate_newになるかと。
maisumakun

2020/11/13 04:19

改めて確認ですが、やりたいことは次のどちらですか? ・「中身の全データ」をブラウザからサーバに送信して、それで新しい項目を作る(この場合、update_newという特殊なアクションすら不要で、単なるcreateをそのまま使ってもいいかもしれません) ・ブラウザから送信するのは「コピーする指示とID」だけ(この場合、params.require以下の処理はまるまる不要です)
makox0105

2020/11/13 04:58

前者になるかと思います。
maisumakun

2020/11/13 05:29

では、まず「中身の全データ」を送信するためのフォーム要素をform_forの内側に用意してください。ユーザーに表示させたくないなら<input type="hidden">で可能です。
makox0105

2020/11/13 06:06

それからどしましょう?
makox0105

2020/11/13 08:20

すみません、ちょっと思ったのですが、IDさえ引っ張れれば大丈夫な気がしました。findでparams[:id]では引っ張れないみたいで…。
maisumakun

2020/11/13 08:23

update_newへのルーティングはどのように定義していますか?
makox0105

2020/11/13 08:33

resources :retrieve_lists do get 'update_new', on: :collection post 'update_new_post', on: :collection end です。
maisumakun

2020/11/13 09:00

おそらく、IDの値はparams[:id]ではなくparams[:retrieve_list_id]に来ているかと思います。
makox0105

2020/11/13 09:17

それも試しました。 Couldn't find RetrieveList with 'id'= になってしまいます。。。
maisumakun

2020/11/13 09:18

rake routesで確認するとルーティングはどのようになっていますか?
makox0105

2020/11/13 09:37

Prefix Verb URI Pattern Controller#Action update_new_retrieve_lists GET /retrieve_lists/update_new(.:format) retrieve_lists#update_new update_new_post_retrieve_lists POST /retrieve_lists/update_new_post(.:format) retrieve_lists#update_new_post retrieve_lists GET /retrieve_lists(.:format) retrieve_lists#index POST /retrieve_lists(.:format) retrieve_lists#create new_retrieve_list GET /retrieve_lists/new(.:format) retrieve_lists#new edit_retrieve_list GET /retrieve_lists/:id/edit(.:format) retrieve_lists#edit retrieve_list GET /retrieve_lists/:id(.:format) retrieve_lists#show PATCH /retrieve_lists/:id(.:format) retrieve_lists#update PUT /retrieve_lists/:id(.:format) retrieve_lists#update DELETE /retrieve_lists/:id(.:format) retrieve_lists#destroy こんな感じです。
maisumakun

2020/11/16 09:18

そもそもupdate_newのルーティングがidを取る形になっていないですね。
makox0105

2020/11/16 09:24

なるほど。どうしたらidが取れるのですか?
maisumakun

2020/11/16 09:27

routes.rbにはどのように書いていますか?
makox0105

2020/11/16 09:32

resources :retrieve_lists do get 'update_new', on: :collection post 'update_new_post', on: :collection end です。
makox0105

2020/11/16 09:45

on: :collectionをon: :memberにしたらできたっぽいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問