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

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

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

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

Ruby on Rails

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

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

1回答

2959閲覧

railsにおけるformタグ内のアクションの分け方について

palpal

総合スコア18

Ruby

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

Ruby on Rails

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

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2016/01/03 05:08

Ruby on Rail(verは4.2.5です)に関して質問です。

現在練習がてら、画像とタイトル、説明文を投稿して一覧表示できる簡単なアプリケーションを作成しています。

アプリ内の機能として、不要な写真を選択して一括削除する機能を設けようと思っているのですが苦戦しています。

内容としては以下のようにform_tagで囲った一覧表示部分を作成し、Buttonによってそれぞれ処理をわけたいと思ったのですが、何故かこの方法だと2行目にある最初の「+写真を追加」ボタンだけ、押下するとindexアクションが呼び出されてしまいます。(「-写真を削除」ボタンはしっかりとselecteddestoryアクションが呼び出されているようです)

<%= form_tag do %>
** <%= button_to "+写真を追加", new_photo_path,method: :get, class:"btn btn-success" %>**
<%= button_to "ー写真を削除", 'photos/selecteddestroy', method: :post, class:"btn btn-danger" %>

<% @photos.each do |photo| %>
<%= link_to image_tag(photo.image_url, alt:photo.title, class:"img-responsive"), photo if photo.image.present? %>
<%= photo.title %>
<%= check_box_tag "photo[][delete_check]", true, photo.delete_check %>
<%= link_to '削除', photo, method: :selected, data:{confirm:'削除しますか?'} %>
<% end %>

<% end %>

PHPの場合こういった場合はとりあえずFromタグで囲って、あとはjsでアクションを動的に変化させていたのですが、railsの場合はどのように書くのがセオリーなのでしょうか。

お手数ですが教えてください。よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

new_photo_pathがphotoコントローラのindexアクションを指定してるURLのエイリアスになっている可能性があるため,以下のいずれかでconfig/routes.rbでnew_photo_pathに設定されているURLとコントローラとアクションが正しいか確認してください。

routesの確認方法

もし正しく設定されていない場合はphotoモデルがrails gコマンドで実装されていれば,resourcesメソッドでのルーティング設定によって自動的に生成されます。
もし正しく設定されているのにもかかわらずindexが呼ばれる場合は,routesで設定したアクションをコントローラに定義し忘れている可能性もしくはindexにリダイレクトしている可能性があります。
どちらでもなければphoto_controller.rbの記述とconfig/routes.rbの中身を確認させていただければと思います。

投稿2016/01/03 22:01

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

palpal

2016/01/04 13:56

回答ありがとうございます。 routeはあっているかと思います。(念のためこのコメントの下記に記載しています。) 不思議なのは下記のように同じタグを二つずつけて書くと、上はcreateメソッド(すいません。説明ではindexと書きましたがcreateの間違いです)が、下はしっかりとnewメソッドが呼ばれます。 <%= form_tag do %> <%= button_to "+写真を追加", new_photo_path,method: :get, class:"btn btn-success" %> <%= button_to "+写真を追加", new_photo_path,method: :get, class:"btn btn-success" %> 以後、同じタグを書いても指定したメソッドが呼ばれるのですが、最初にあるボタンだけ必ずcreateメソッドが呼ばれてしまいます。 何かrouteではないところに原因があるのでしょうか。 route.rb ---------------------------------------------------------------------------------------- match '/photos/update_all'=> 'photos#update_all', via: [:get,:post] match '/photos/confirm_all'=> 'photos#confirm_all',via:[:get, :post] match '/photos/edit_all'=> 'photos#edit_all',as:'edit_all_photo',via:[:get,:post] resources :photos resources :albums ---------------------------------------------------------------------------------------- photo_controller.rb ---------------------------------------------------------------------------------------- class PhotosController < ApplicationController before_action :set_photo, only: [:show, :edit, :update, :destroy] # GET /photos # GET /photos.json def index @photos = Photo.all session[:photos]=@photos respond_to do |format| format.html #index.html.erb format.json{render json:@photos} end end # GET /photos/1 # GET /photos/1.json def show end # GET /photos/new def new @photo = Photo.new end # GET /photos/1/edit def edit end # POST /photos # POST /photos.json def create @photo = Photo.new(photo_params) respond_to do |format| if @photo.save format.html { redirect_to @photo, notice: 'Photo was successfully created.' } format.json { render :show, status: :created, location: @photo } else format.html { render :new } format.json { render json: @photo.errors, status: :unprocessable_entity } end end end # PATCH/PUT /photos/1 # PATCH/PUT /photos/1.json def update respond_to do |format| if @photo.update(photo_params) format.html { redirect_to @photo, notice: 'Photo was successfully updated.' } format.json { render :show, status: :ok, location: @photo } else format.html { render :edit } format.json { render json: @photo.errors, status: :unprocessable_entity } end end end # DELETE /photos/1 # DELETE /photos/1.json def destroy @photo.destroy respond_to do |format| format.html { redirect_to photos_url, notice: 'Photo was successfully destroyed.' } format.json { head :no_content } end end #GET /photos/edit_all def edit_all @photos=session[:photos] end #GET /photos/confirm_all def confirm_all @photos=Array.new params.require(:photos).each do |photo| updated_photo=Photo.find(photo["id"]) updated_photo.update(photo.permit(:title,:memory)) @photos << updated_photo end session[:photos]=@photos end #GET /photos/update_all def update_all respond_to do |format| format.html { redirect_to photos_url, notice: '更新しました' } format.json { head :no_content } end end private # Use callbacks to share common setup or constraints between actions. def set_photo @photo = Photo.find(params[:id]) end # Never trust parameters from the scary internet, only allow the white list through. def photo_params params.require(:photo).permit(:image, :title, :memory, :agreement) end end ----------------------------------------------------------------------------------------
退会済みユーザー

退会済みユーザー

2016/01/22 02:23 編集

ご返信遅くなって申し訳ないです。 form_tagの中にbuttonが入っていてPOSTメソッドでリダイレクトがかかっているのではないでしょうか。 form内のsubmitでのリクエストはPOSTで送信されます。 resourcesメソッドで生成されるpathはnewアクションがget,createアクションがPOSTで実行されていたと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問