首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails URL向后移动

Rails URL向后移动
EN

Stack Overflow用户
提问于 2020-02-16 01:23:22
回答 2查看 55关注 0票数 0

我有个奇怪的问题。我的应用程序中有两个模型,一个是市区,另一个是房产。市中心应该有多处房产,而房产应该有一处市中心。

在我的市中心展示页面上,我遍历每个市中心的属性,然后提供这些属性的链接。

Problem is.....when当我点击每个属性时,url会向后显示。也就是说,一个ID为1的市区和一个ID为8的房产应该是

代码语言:javascript
复制
downtown/1/properties/8

然而,它还在继续

代码语言:javascript
复制
downtown/8/properties/1

我觉得这太奇怪了,我完全不知道我到底做错了什么。

在我的市中心展示页面上,我遍历了每一处房产

代码语言:javascript
复制
%h2= @downtown.name
- if @downtown.properties.present?
  %p 
    - @downtown.properties.collect do |property|
      = link_to property.name, downtown_property_path(property)

- else
  No downtowns for now.

我的路由是这里的基本嵌套路由

代码语言:javascript
复制
  resources :downtowns do
    resources :properties
  end

我的属性控制器是

代码语言:javascript
复制
class PropertiesController < Downtown::ApplicationController
  before_action :find_property, only: [:show, :edit, :update, :destroy]

  def new
    @property = @downtown.properties.new
  end

  def create
    @property = @downtown.properties.new(property_params)

    if @property.save
      redirect_to @downtown
    else
      render :new
    end
  end

  def show
  end

  private

  def property_params
    params.require(:property).permit(:name, :downtown, :downtown_id......)
  end

  def find_property
    @property = Property.find(params[:id])
  end
end

我的市中心控制员是

代码语言:javascript
复制
class DowntownsController < ApplicationController
  before_action :find_downtown, only: [:show, :edit, :update, :destroy]

  def show
    @properties = Property.where(downtown: @downtown_id)
  end

  def new
    @downtown = Downtown.new
  end

  def create
    @downtown = Downtown.create(downtown_params)
    if @downtown.save
      redirect_to @downtown
    else
      render 'new'
    end
  end

  private

  def downtown_params
    params.require(:downtown).permit(:name, :city)
  end

  def find_downtown
    @downtown = Downtown.find(params[:id])
  end  
end

最后,在我的属性表单中,我有一个多态路径

代码语言:javascript
复制
= simple_form_for([@property, @downtown]) do |f|
  = f.input :name
  = f.input :last_remodel
  = f.input :original_construction_year
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-16 01:56:23

嵌套路由路径采用多个参数Rails Guide

在您的示例中,它应该是downtown_property_path(@downtown, property)

票数 2
EN

Stack Overflow用户

发布于 2020-02-16 02:01:06

我想提供一个可以简化您的路由的答案。

如果您的属性只能引用一个市中心(根据您的控制器,似乎就是这种情况),那么您就不需要像downtown/1/properties/8这样的URL。

要访问id为8的属性,您应该简单地使用properties/8,因为在控制器操作中,您将能够加载相关的市中心(使用id=1),因为它在属性记录中被引用。嵌套资源的show操作通常不需要经过父资源。

PS:当子资源(本例中为properties)可以有多个父资源(downtowns)链接到该子资源时,通过父资源访问嵌套资源非常有用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60241244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档