2014-01-03 2 views
0

Как вы перенаправляете ресурс на контроллер? Я использую ресурс на странице редактирования для другой модели, поэтому мои действия сначала направляются на контроллер модели.Маршрутизация ресурса контроллеру

Эта страница редактирования запросов от

class Grandstreamers::ResellersController < ApplicationController 
def new 
end etc... 

Я пытаюсь маршрутизировать запросы здесь вместо:

Grandstreamers::CertificatesController < ApplicationController 
def new 
end 
def update 
end etc... 

Это моя форма соображениях/grandstreamers/реселлеров/edit.html .erb

<%= form_for @untrained, :url => certificates_update_path(@untrained) do |f| %> 
      <p> Trained Users </p> 
      <%= select_tag "certificate[user_id]", options_for_select(@current_trained.collect{|x| [x.name, x.id]}), {:multiple => :multiple} %> 
      <%= f.submit "Un-Train", class: "btn btn-large btn-primary" %> 
     <% end %> 

     <%= form_for @trained, :url => certificates_create_path(@trained) do |f| %> 
      <p> Non-Trained Users </p> 
      <%= select_tag "certificate[user_id]", options_for_select(@non_trained.collect{|x| [x.name, x.id]}), {:multiple => :multiple} %> 
      <%= f.submit "Train", class: "btn btn-large btn-primary" %> 
     <% end %> 

Мой маршрут:

resources :certificates 

Обратите внимание, что

:url => certificates_create_path 

не правильно и не работает. Есть ли способ указать этот маршрут в файле routes.rb или в моей форме? Спасибо

EDIT

Это мой resellers_controller редактировать(), который маршруты в первую очередь.

@trained = Certificate.new(params[:certificate]) 

    #Trying to get to certificates_controller update. Then update the :attend to "No" 
    #@untrained = Certificate.new(params[:certificate]) 
    #@untrained = Certificate.find(params[:id]) 
    #@untrained = Certificate.find_by_user_id(params[:id]) 

@untruined не определен, я не уверен, как его заставить просто перейти к моему контроллеру сертификатов. Для @trained я могу определить его, поскольку он еще не создан и не дает мне ошибок, когда он не может найти правильное значение.

Мои сертификаты контроллер, который использует создание(), но не может получить обновление()

def create 

@trained = Certificate.new(params[:certificate]) 
if @trained.save 
    @trained.update_attributes(attend: "Yes") 
end 
redirect_to grandstreamers_resellers_path 

end 

def update 
@untrained = Certificate.find(params[:id]) 
@untrained.update_attributes(attend: "No") 
redirect_to grandstreamers_resellers_path 
end 

Major Issue Переменная экземпляра @trained и @untrained должны быть определены как-то в reseller_controller. Что я могу определить для загрузки страницы редактирования?

Часть Решение

я определил это в моем resellers_controller и загружает страницу редактирования в настоящее время.

@untrained = User.find(params[:id]) 

Теперь я получаю эту ошибку:

No route matches [PUT] "/certificates.1" 
+0

Что вы здесь делаете? – arun15thmay

+0

Я выделил то, что я пытаюсь сделать. – DDDD

+0

запустите «маршруты рейка», чтобы увидеть ваши маршруты .. обратите внимание, что ваш путь обновления для сертификатов - сертификат (_path) (PUT), а не certificate_update (_path) –

ответ

1

Я считаю, что проблема в том, что вам нужно, чтобы маршрутизации знать полное имя контроллера.

От Rails routing guide:

scope module: 'Grandstreamers' do 
    resources :certificates 
end 

Используйте эти пути при создании формы:

<%= form_for @untrained, :url => certificate_path(@untrained), :method => :put do |f| %> 

<%= form_for @trained, :url => certificates_path, :method => :post do |f| %> 
+0

В сертификате есть опечатка, должен ли быть сертификат_path (@untrained)? Это все еще требует @untrained, определенного в resellers_controller – DDDD

0

использовать это его маршруты.rb file

namespace :grandstreamers do 
resources :certificates 
end 
+0

Это не определяет ничего другого, кроме того, что уже маршрутизируется. Эти действия уже работают на грандовщиков. Мне нужно, чтобы они перешли к контроллеру сертификатов вместо контроллера реселлеров. Оба они уже маршрутизированы для grandstreamers. – DDDD

+0

, когда вы используете вышеуказанный код в файле routes.rb, затем проверяйте маршруты по рейк-маршрутам. Там вы нашли новую переменную для пути, затем назначили соответствующую переменную пути, чтобы все это было решением вашей проблемы. – HarsHarI

+0

Маршруты уже используются grandstreamers, поскольку они являются глобальными. Он уже нашел правильный контроллер. Джерри Клинесмит был прав с указанием URL. – DDDD

Смежные вопросы