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

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回答

339閲覧

ボタンに値を持たせてDBに送る記述をするとArgumentErrorになる

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/14 06:30

現象

メルカリのようなフリマアプリを作成しており、商品の詳細ページでボタン1つで出品中、出品停止中の切り替えが出来るようにしたいと考えております。

しかし、下記のようにf.buttonにDBのカラムを持たせたところ、変数エラーが出てしまい原因が分かりません。
この点どのように解決すべきか、教えて頂きたいです。

環境

Rails 5.0.7.1

View

haml

1= link_to edit_product_path(@product.id), class: "btn-default btn-red" do 2 商品の編集 3%p or 4= form_for @product, url: previewChange_product_path(@product.id) do |f| 5 - if @product.status == "出品中" 6 = f.button "出品を一旦停止する", type: "submit", class: "btn-default btn-gray" 7 - else @product.status == "公開停止中" 8 = f.button "出品を再開する", :status, value: 0, type: "submit", class: "btn-default btn-red" 9= link_to "/products/#{@product.id}", class: "btn-default btn-gray", method: :delete do 10 この商品を削除する

Controller

ruby

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

Routes

ruby

1Rails.application.routes.draw do 2 resources :products do 3 collection do 4 get 'buy', to: 'products#buy', as: 'buy' 5 end 6 member do 7 get :preview, to: 'products#preview', as: 'preview' 8 patch :previewChange, to: 'products#previewChange', as: 'previewChange' 9 end 10 end 11end

試したこと

https://teratail.com/questions/2578
こちらの記事も参考にして、f.buttonの変数を{:status, value: 0}と書いてみましたがうまくいきませんでした。

よろしくお願いします!

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

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

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

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

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

gouf

2019/02/14 09:21

どんなエラーが発生したのか、そのエラーメッセージのコピペを追記すると、回答が得られやすくなるかもしれません
t1gerkngd0m

2019/02/14 09:30

ありがとうございます!すみません、エラー文を書き忘れておりました。 おかげさまで自己解決しましたので、本件については大丈夫です! ただ思った通りでない挙動が発生しているので、よろしければそちらも見て頂けますと大変幸いです。
gouf

2019/02/14 09:31

この件が解決したのであれば、状況をまとめた自己回答を投稿し、それをベストアンサーに設定して解決済みにしてください。別件であれば また改めて質問してみると良いかもしれません
guest

回答1

0

自己解決

haml

1= f.button "出品を再開する", :status, value: 0, type: "submit", class: "btn-default btn-red"

上記のようなコードを書いておりましたが、f.buttonにそんなものを埋め込むことはできないようでした。
ArgumentErrorは'f.button'の第二引数がhashなのに、そこにsymbolの':status'を渡していたからのようです。
下記のコードでうまくいきました。

haml

1= f.hidden_field :status, value: 3 2= f.button "出品を一旦停止する", type: "submit", class: "btn-default btn-gray"

投稿2019/02/14 09:35

t1gerkngd0m

総合スコア26

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問