2017-09-01 4 views
0

Utilisation d'itinéraires et d'associations imbriqués. J'ai un partiel qui crée un locataire, mais après la création il reste avec le formulaire rendu et l'URL change pour/locataires. Le comportement souhaité est qu'il doit rediriger vers la page d'affichage. Les itinéraires sont comme suit:Rails ne demandant pas à afficher la page après l'envoi de l'utilisateur

Rails.application.routes.draw do 
    devise_for :landlords 

    authenticated :landlord do 
    root "properties#index", as: "authenticated_root" 
end 
    resources :tenants 
    resources :properties do 
    resources :units 
    end 

    root 'static#home' 
end 

Jusqu'à présent, les propriétés et les unités de travail (et le propriétaire) avec les locataires est question. À l'origine, j'avais des locataires imbriqués sous des unités, mais il y avait aussi des problèmes. regards partiels comme celui-ci:

<%= form_for @tenant do |f| %> 

<%= f.label "Tenant Name:" %> 
<%= f.text_field :name %> 

<%= f.label "Move-in Date:" %> 
<%= f.date_field :move_in_date %> 

<%= f.label "Back Rent Amount:" %> 
$<%= f.text_field :back_rent %> 

<%= f.button :Submit %> 

<% end %> 

<%= link_to "Cancel", root_path %> 

locataires contrôleur ressemble à ceci:

before_action :authenticate_landlord! 
#before_action :set_unit, only: [:new, :create] 
before_action :set_tenant, except: [:new, :create] 


    def new 
    @tenant = Tenant.new 
    end 

    def create 
    @tenant = Tenant.new(tenant_params) 
    if @tenant.save 
     redirect_to(@tenant) 
    else 
     render 'new' 
    end 
    end 

    def show 
    end 

    def edit 
    end 

    def update 
    if @tenant.update(tenant_params) 
     redirect_to unit_tenant_path(@tenant) 
    else 
     render 'edit' 
    end 
    end 

    def destroy 
    end 

private 

    def set_property 
    @property = Property.find(params[:property_id]) 
    end 

    def set_unit 
    @unit = Unit.find(params[:unit_id]) 
    end 

    def set_tenant 
    @tenant = Tenant.find(params[:id]) 
    end 

    def tenant_params 
    params.require(:tenant).permit(:name, :move_in_date, :is_late, :back_rent, :unit_id) 
    end 
end 

modèles ont des associations:

class Tenant < ApplicationRecord 
    belongs_to :unit, inverse_of: :tenants 
end 

class Unit < ApplicationRecord 
    belongs_to :property, inverse_of: :units 
    has_many :tenants, inverse_of: :unit 
end 

Enfin le spectacle # locataires routes râteau:

tenant GET /tenants/:id(.:format)      tenants#show 

J'ai largement recherché pour ce sujet, mais n'ont pas eu de succès. Toute aide est appréciée. Rails 5.1

Répondre

0

L'itinéraire que vous montrez à la fin de votre question:

tenant GET /tenants/:id(.:format)      tenants#show 

n'est pas l'indice des locataires; C'est le parcours individuel des locataires/spectacle. Vous pouvez le dire car il comprend :id, ce qui signifie qu'il vous montrera un locataire spécifique ayant cet ID.

Essayez à nouveau d'exécuter rake routes. L'itinéraire d'index devrait ressembler à ceci:

tenants GET /tenants(.:format)      tenants#index 

Si vous souhaitez revenir à l'index des locataires après la création ou la mise à jour d'un dossier de locataire, vous devez spécifier ce chemin dans votre TenantsController. Dans les deux #create et #update actions, votre ligne de redirection (après if @tenant.save et if @tenant.update, respectivement) doit se lire:

redirect_to tenants_path 

qui vous mènera à la TenantsController, l'action #index.

A titre subsidiaire, si vous souhaitez revenir à la page individuelle d'exposition de locataire, puis changer à la place ces deux réoriente dans le TenantsController dans les deux actions #create et #update à:

redirect_to tenant_path(@tenant) 

qui vous emmènera au TenantsController, # show d'action pour le @tenant actuel.

+0

J'ai fini par changer quelques choses. Je pense que mon problème principal était le routage. J'ai ajouté une route imbriquée peu profonde, et tout semble fonctionner correctement. Merci pour votre aide @moveson –