0

Call データベースからの呼び出しのリストを表示する「clients」というビューがあります。それはうまくいきます。ただし、背後にフォームがある新しいボタンを追加すると、呼び出しが作成されますが、clients_path ではなく、calls_path にリダイレクトされます。

なぜこれを行っているのかわかりません。私の唯一の理論は、clients_controller の外部のデータに触れるアクションを操作していて、どういうわけか Rails が calls_path にデフォルト設定されているということです。私の削除アクションでも同じことが起こります。誰かがこれを理解するのを手伝ってくれますか?

calls_controller
def new
    @call = Call.new :call_status => "open"

    respond_with @call
  end

  def create
    @call = Call.new(params[:call])

     if @call.save
        redirect_to clients_path, notice: "Call was successfully created."
      else
        render :new
     end
  end 

  def destroy
      @call = Call.find(params[:id])
      @call.destroy

      respond_to do |format|
        format.html { redirect_to clients_index_path }
        format.json { head :no_content }
      end
    end

_form.html.erb
<%= form_for(@call) do |f| %>

  <%= f.label :caller_name %>
  <%= f.text_field :caller_name %>
  <%= f.label :caller_phone %>
  <%= f.text_field :caller_phone, :placeholder => 'xxx-xxx-xxxx' %>
  <%= f.label :caller_email %>
  <%= f.text_field :caller_email %>

  <%= f.button :submit %>

<% end %>

routes.rb
devise_for :users
  match 'mdt' => 'mdt#index'
  get "home/index"
  resources :medics
  resources :clients
  resources :users
  resources :units
  resources :mdt do
    collection do
      put "in_service"
      put "en_route"
      put "to_hospital"
      put "at_hospital"
      put "on_scene" 
      put "out_of_service" 
      put "at_station"
      put "staging"
      put "at_post"
      put "man_down"
  end
  end
  resources :calls do
    member do
      post 'close'
    end
  end
  root :to => 'home#index'
  devise_scope :user do
    get "/login" => "devise/sessions#new"
    delete "/logout" => "devise/sessions#destroy"
  end
4

1 に答える 1

0

私が抱えていた問題はルートにありました。新しい呼び出しには post メソッドが必要でした。ルートとともに 2 つのアクション (作成用と破棄用) を作成すると、すべてが機能し始めました。私の目的のために間違った URL に再ルーティングするデフォルトのルートとアクションを使用しようとしていたようです。

resources :clients do
    collection do
      post "calls"
    end
    member do
      delete "cancel"
    end
  end



 def calls
    @call = Call.new(params[:call])

     if @call.save
        redirect_to clients_path, notice: "Call was successfully created."
      else
        render :new
     end
  end 

  def cancel
      @call = Call.find(params[:id])
      @call.destroy

      respond_to do |format|
        format.html { redirect_to clients_path }
        format.json { head :no_content }
      end
    end
于 2012-06-20T13:58:56.677 に答える