用户提交后,Rails不指示显示页面

时间:2017-09-01 06:31:06

标签: ruby-on-rails ruby forms activerecord associations

使用嵌套路由和关联。我有一个部分创建了一个租户,但在创建之后它保留了渲染的表单,并且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

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.saveif @tenant.update之后)应为:

redirect_to tenants_path

这将带您进入TenantsController,#index行动。

或者,如果您想要返回到单个租户显示页面,请在#create#update操作中将TenantsController中的这两个重定向更改为:

redirect_to tenant_path(@tenant)

这将带你到TenantsController,#show当前的@tenant动作。