2017-02-09 3 views
0

Есть ли способ в Rails удалять и перенаправлять иначе, чем определено в контроллере, уничтожить действие?Rails - link_to - удалить действие - как перенаправить на другую страницу с помощью другого действия контроллера внутри link_to

На взгляд сделка шоу у меня есть:

<% @deal.tenants.each do |guy| %> 
    <li>Tenant id #<%= guy.id %> - <%= link_to guy.last_name, deal_tenant_path(@deal, guy) %> 
    <%= link_to "delete", deal_tenant_path(@deal, guy), method: :delete, data: { confirm: "Are you sure you want to delete this tenant?"} %></li> 
<% end %> 

На взгляд жилец шоу у меня есть:

<li><%= link_to "Delete Tenant", [@deal, @tenant], method: :delete, 
data: { confirm: "Are you sure you want to delete this tenant?"}, 
class: "delete" %></li> 

На индексном жилец у меня есть

<% @deal.tenants.each do |tenant| %> 
    <li>Tenant id #<%= tenant.id %> - <%= link_to tenant.last_name, [@deal, tenant] %></li> 
    <li><%= link_to "Delete Tenant", deal_tenant_path(tenant.deal, tenant), method: :delete, data: { confirm: "Are you sure you want to delete this tenant?"} %></li> 
<% end %> 

В строке с моим контроллером при удалении я перенаправлен на шоу @deal. tenants_controller.rb

def destroy 
    @tenant.destroy 
    flash[:notice] = "Tenant has been deleted." 
    redirect_to @deal 
end 

Что делать, если я хочу быть перенаправлен по-разному каждый раз? Предположим, я хочу остаться в представлении шоу арендатора при удалении на этой странице, а не перенаправляться на страницу показа сделки. В качестве альтернативы я хотел бы быть перенаправлен на просмотр индекса арендатора и т. Д.

Нужно ли мне определять разные действия с разными перенаправлениями в контроллере арендаторов или я могу сделать это внутри link_to?

Вложенные маршруты:

resources :deals, only: [:index, :show, :create, :update, :destroy] do 
    scope '/siteadmin' do 
    resources :tenants 
    end 
end 

scope '/siteadmin' do 
    resources :deals, except: [:index, :show] 
end 

Deal.rb

class Deal < ApplicationRecord 
    has_many :tenants, dependent: :destroy 
end 

Tenant.rb

class Tenant < ApplicationRecord 
    belongs_to :deal 
    validates :deal_id, :first_name, :last_name, :age, presence: true 
end 

ответ

0

Это не может быть сделано link_to, потому что действие будет называться в вашем контроллер. Но вы, конечно, можете изменить redirect_ к @deal в

redirect_to :back 

или redirect_to what_ever_path

Вы всегда можете создавать различные действия, или вы проходите Params с link_to и добавить строку в текущее действие контроллера, как :

if params[:tenant] 
redirect_to :back 
else 
redirect_to @deal 

Ответы на ваш вопрос?

+0

Большое спасибо, это объяснение, которое я искал. – nicodo

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