使用嵌套路由和关联。我有一个部分创建了一个租户,但在创建之后它保留了渲染的表单,并且url更改为/ tenants。期望的行为是它需要重定向到显示页面。路线如下:
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
到目前为止,房产和单位工作(以及房东)问题与租户有关。最初我让Tenants嵌套在单位下面,但也有问题。部分看起来像这样:
<%= 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 %>
租户控制器如下所示:
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
模型有关联:
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
最后,佣金路线中的节目#租户是:
tenant GET /tenants/:id(.:format) tenants#show
我已经广泛搜索了这个主题,但没有取得任何成功。任何帮助表示赞赏。 Rails 5.1
答案 0 :(得分:0)
您在问题结尾附近显示的路线:
tenant GET /tenants/:id(.:format) tenants#show
不是租户索引;它是个人租户/展示路线。您可以告诉它,因为它包含:id
,这意味着它会向您显示具有该ID的特定租户。
再次尝试运行rake routes
。索引路径应如下所示:
tenants GET /tenants(.:format) tenants#index
如果要在创建或更新租户记录后返回租户索引,则需要在TenantsController中指定该路径。在#create
和#update
操作中,您的重定向行(分别在if @tenant.save
和if @tenant.update
之后)应为:
redirect_to tenants_path
这将带您进入TenantsController,#index行动。
或者,如果您想要返回到单个租户显示页面,请在#create
和#update
操作中将TenantsController中的这两个重定向更改为:
redirect_to tenant_path(@tenant)
这将带你到TenantsController,#show当前的@tenant动作。