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

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

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

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

Ruby

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

Ruby on Rails

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

Q&A

1回答

1172閲覧

form_forからformタグが生成されず、ボタン押下時に期待した遷移をしてくれない

t1gerkngd0m

総合スコア26

Ruby on Rails 5

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

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2019/02/15 09:00

編集2022/01/12 10:55

困っていること

フリマアプリを作成しており、ボタンを押すだけで商品の出品・停止の変化を実現させたいです。
しかし、ボタンを押した後コントローラーへ処理が飛んでおらず、そのままトップページが表示されます。
form_forから生成されるHTMLを検証したところ、formタグが生成されず、inputタグしか生成されておりませんでした。
恐らくそれが原因だと思いますので、記述で間違っている箇所があればご指摘頂きたいです。

View

haml

1= form_for( @product, url: {action: :previewChange}, html: {method: :patch}) do |f| 2 - if @product.status == "出品中" 3 = f.hidden_field :status, value: 3 4 = f.submit "出品を一旦停止する", class: "btn-default btn-gray" 5 - else @product.status == "公開停止中" 6 = f.hidden_field :status, value: 0 7 = f.button "出品を再開する", type: "submit", class: "btn-default btn-red"

Controller

ruby

1 before_action :set_product, only: [:preview, :previewChange] 2 def preview 3 @item_images = @product.item_images 4 end 5 6 def previewChange 7 binding.pry 8 @product.update(status_params) 9 if product.update(status_params) 10 render :preview 11 else 12 render :preview 13 end 14 end 15 private 16 def set_product 17 @product = Product.find(params[:id]) 18 end 19 20 def status_params 21 params.require(:product).permit( 22 :status 23 ) 24 end

Routes

ruby

1root to:'products#index' 2resources :products do 3 member do 4 get :preview, to: 'products#preview', as: 'preview' 5 patch :preview, to: 'products#previewChange', as: 'previewChange' 6 end 7end

生成されるHTML

<input type="hidden" name="_method" value="patch"> <input name="utf8" type="hidden" value="✓"> <input type="hidden" name="authenticity_token" value="xBqknEQpIVhamvQiSpasB+k2BxisQPK2qzRVsLuNit5LTn1i1Y9f+stjsA+q9CgoVdwG8Rndeyegtj+kG3QuPg=="> <input value="3" type="hidden" name="product[status]" id="product_status"> <input type="submit" name="commit" value="出品を一旦停止する" class="btn-default btn-gray" data-disable-with="出品を一旦停止する">

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

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

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

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

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

guest

回答1

0

hmtlのformが生成されないのはよくわからないですね。コントローラも指定するといかがでしょう。

= form_for( @product, url: {controller: :products,action: :previewChange}, html: {method: :patch}) do |f|

投稿2019/02/23 16:01

ykp_yk

総合スコア654

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問