現在ECサイトを作成しています。
フラグをたてて管理したいのですが1つのcontrollerでdestroyアクションを実行してしまうと会社の住所登録と配送先の住所登録の両方が消えてしまいます。
そこでcontrollerを2つ作成し、それぞれの内容を1つのモデルに保存しようと考えましたが、うまくいきません。
###実現したいこと
- 住所モデル(adress)は1つ
- 会社の住所登録、編集用のcontroller(c_adresses_controller)
- 配送先の住所登録、編集用のcontroller(s_adresses_controller)
として2つのcontrollerの内容を1つの住所モデルに保存したいのですがルーティングエラーが発生します。
原因がわかる方、解決方法がわかる方がいらっしゃいましたらよろしくお願いします。
###動作環境
OS:mac
Ruby:2.3.5
Ruby on Rails: 4.2.5
###現状
- deviseを利用している
- Adress(住所)モデルを1つ作成している
- controllerは2つ作成している(c_adress(会社住所) と s_adress(配送先住所))
- form_forを利用している
- 会社住所、配送先住所をフラグを使って判断する
- 2つの controller と View の内容はほぼ同じ
- 下記のコードの controller と View は会社住所(s_adress)関連のものです
###試したこと
下記のサイトを参考にしてみましたが同じエラーが発生しました
railsでコントローラに関連付けられているテーブルとは別のテーブルのデータを読み書きするにはどうすればいいんでしょうか?
###該当のソースコード(抜粋、devise関連は省略してあります)
config/routes.rb
ruby
1Rails.application.routes.draw do 2 3 #住所関連 4 resources :adresses, :only => [:index] 5 resources :c_adresses, :except => [:index, :show] 6 resources :s_adresses, :except => [:index, :show] 7 8 root to: 'tops#index' 9end
schema.rb
ruby
1ActiveRecord::Schema.define(version: 20180106142022) do 2 3 create_table "adresses", force: :cascade do |t| 4 t.integer "user_id", limit: 4 5 t.string "postal_code", limit: 255 6 t.string "city", limit: 255 7 t.integer "c_adress_flg", limit: 4 8 t.integer "s_adress_flg", limit: 4 9 t.datetime "created_at", null: false 10 t.datetime "updated_at", null: false 11 end 12 13end
app/controllers/s_adresses_controller.rb
ruby
1class SAdressesController < ApplicationController 2 #↓↓ここを参考サイトをもとに追記しましたがエラー内容は変わりませんでした。 3 model :adress 4 5 def new 6 @adress = Adress.new 7 @submit = "登録する" 8 end 9 10 def create 11 @adress = Adress.new(adress_params) 12 13 if @adress.save 14 # redirect_to adresses_url(id: current_user.id) 15 redirect_to adresses_path 16 else 17 render 'new' 18 end 19 end 20 21 private 22 def adress_params 23 params.require(:adress).permit(:user_id, :postal_code, :city, :street, :others, :c_adress_flg, :s_adress_flg) 24 end 25 26end
app/views/s_adresses/new.html.erb
ruby
1<%= form_for(@adress) do |f|%> 2 3<!-- 郵便番号 --> 4 <div class="field"> 5 <%= f.label :postal_code, '郵便番号' %> 6 <%= f.text_field :postal_code, autofocus: true %> 7 </div> 8<!--市区町村--> 9 <div class="field"> 10 <%= f.label :city, '市区町村'%> 11 <%= f.text_field :city, autofocus: true %> 12 </div> 13 14 <!-- 通常配送先の可否 --> 15 <div class="field"> 16 <%= f.check_box :s_adress_flg,{}, 2, 1 %><%= f.label :s_adress_flg, '通常配送先にする'%> 17 </div> 18 19 <%= f.hidden_field :user_id, value: current_user.id %> 20 <%= f.hidden_field :c_adress_flg, :value => 0 %> 21 22 <div class="actions"> 23 <%= f.submit @submit %> 24 </div> 25<% end %>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。