Итак, я работал над проектом rails, который определяет два разных действия create в одном контроллере. Вот мой контроллер:
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
В моем
routes.rb
В файле Ive использовал как настраиваемые, так и находчивые маршруты для определения маршрутов для первого и второго действий 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
Таким образом, оба действия post будут работать тогда и только тогда, когда их маршруты размещены перед другим. Есть ли способ избавиться от приоритета? Или где я ошибаюсь?
Спасибо.
1 ответ
Таким образом, оба действия post будут работать тогда и только тогда, когда их маршруты размещены перед другим.
Вот как вы должны определить, чтобы маршруты работали. Поскольку маршруты, определенные в 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
Похожие вопросы
Новые вопросы
ruby-on-rails
Ruby on Rails - это полнофункциональная платформа веб-приложений с открытым исходным кодом, написанная на Ruby. Он следует популярной модели фреймворка MVC и известен своим подходом «соглашение поверх конфигурации» при разработке приложений.