Rails Routing Precedence отдает предпочтение первым - PullRequest
0 голосов
/ 22 сентября 2018

Итак, я работал над проектом rails, который определяет два разных действия создания в одном контроллере. Вот мой контроллер:

class SmsSendsController < ApplicationController
  def new
    @at = SmsSend.new
    @contact = Contact.find_by(id: params[:id])
  end
  def create
    @at = SmsSend.create(sms_params)
    if @at.save!
    @con = current_user.contacts.find_by(id: @at.contact_id)
    AfricasTalkingGateway.new("trial-error").sendMessage(@con.phonenumber, @at.message)
    end
  end
  def new_all
    @at = SmsSend.new
    @contact = Contact.find_by(id: params[:id])
  end
  def create_all
    @at = SmsSend.create(sms_params)
    if @at.save!
    current_user.contacts.each do |c|
      AfricasTalkingGateway.new("trial-error").sendMessage(c.phonenumber, @at.message)
    end
    end
 end

  private
  def sms_params
    params.require(:sms_send).permit(:mobile, :message, :contact_id)
  end
end

В моем файле

rout.rb

я использовал как пользовательский, так и находчивыймаршруты для определения маршрутов для первого и второго действий new / create:

Rails.application.routes.draw do
  devise_for :users
  get 'sms_sends/new_all', to: 'sms_sends#new_all'
  post 'sms_sends', to: 'sms_sends#create_all'
  resources :contacts
  resources :sms_sends
  root 'contacts#index'
end

Таким образом, оба действия после публикации будут работать тогда и только тогда, когда их маршруты размещены раньше других.Есть ли способ, которым я могу избавиться от приоритета?Или где я ошибаюсь?

Спасибо.

1 Ответ

0 голосов
/ 22 сентября 2018

Таким образом, оба почтовых действия будут работать тогда и только тогда, когда их маршруты размещены раньше других.

Именно так вы должны определить маршруты для работы.Поскольку маршруты, определенные в routes.rb, будут скомпилированы из сверху вниз .Таким образом, если ваши пользовательские маршруты получат с предшествующим ресурсным маршрутом , тогда пользовательские маршруты будут конфликтовать с вашими ресурсоемкими маршрутами.

Есть ли способ, которым я могу избавиться от приоритета?

Определить их как маршруты сбора примерно так,

resources :sms_sends do
  get 'sms_sends/new_all', to: 'sms_sends#new_all', on: :collection
  post 'sms_sends', to: 'sms_sends#create_all', on: :collection
end

выше будет генерировать маршруты с помощниками пути, как показано ниже

sms_sends_new_all_sms_sends   GET    /sms_sends/sms_sends/new_all(.:format)   sms_sends#new_all
sms_sends_sms_sends           POST   /sms_sends/sms_sends(.:format)           sms_sends#create_all

Для лучшей читаемости , вы можете изменить свои пользовательские маршруты следующим образом:

resources :sms_sends do
  get 'new_all', to: 'sms_sends#new_all', on: :collection
  post 'create_all', to: 'sms_sends#create_all', on: :collection
end

Это сгенерируетпомощники пути, как показано ниже

new_all_sms_sends             GET    /sms_sends/new_all(.:format)      sms_sends#new_all
create_all_sms_sends          POST   /sms_sends/create_all(.:format)   sms_sends#create_all
...