Rails 网址倒退
Rails URLs goes backwards
我有一个奇怪的问题。我的应用程序中有两个模型,市区和物业。市中心应该有多个房产,而房产应该有一个市中心。
在我的市中心展示页面上,我循环浏览每个市中心的房产,然后提供这些房产的链接。
问题是......当我点击每个 属性 时,url 会倒退。 IE,ID 为 1 的市中心和 ID 为 8 的 属性 应该去
downtown/1/properties/8
但它还在继续
downtown/8/properties/1
我觉得这太奇怪了,我不知道我在这里做错了什么。
在我的市区展示页面上,我循环遍历每个 属性
%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.
我的路由这里是基本的嵌套路由
resources :downtowns do
resources :properties
end
我的属性控制器是
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
我的市区控制器是
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
最后在我的属性表单中我有一个多态路径
= simple_form_for([@property, @downtown]) do |f|
= f.input :name
= f.input :last_remodel
= f.input :original_construction_year
嵌套路由路径采用多个参数Rails Guide。
你的情况应该是downtown_property_path(@downtown, property)
我想提供一个可以简化您的路由的答案。
如果您的物业只能引用一个市中心(根据您的控制器似乎是这种情况),那么您不需要 downtown/1/properties/8
等 URL。
要访问 ID 为 8 的 属性,您只需使用 properties/8
,因为在控制器操作中,您将能够加载相关的市区(id=1 ) 因为它在 属性 记录中被引用。 show
嵌套资源的操作通常不需要通过父级。
PS:当子资源(properties
在您的情况下)可以有多个父资源链接到它时(downtowns
),通过父资源访问嵌套资源最有用.
我有一个奇怪的问题。我的应用程序中有两个模型,市区和物业。市中心应该有多个房产,而房产应该有一个市中心。
在我的市中心展示页面上,我循环浏览每个市中心的房产,然后提供这些房产的链接。
问题是......当我点击每个 属性 时,url 会倒退。 IE,ID 为 1 的市中心和 ID 为 8 的 属性 应该去
downtown/1/properties/8
但它还在继续
downtown/8/properties/1
我觉得这太奇怪了,我不知道我在这里做错了什么。
在我的市区展示页面上,我循环遍历每个 属性
%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.
我的路由这里是基本的嵌套路由
resources :downtowns do
resources :properties
end
我的属性控制器是
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
我的市区控制器是
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
最后在我的属性表单中我有一个多态路径
= simple_form_for([@property, @downtown]) do |f|
= f.input :name
= f.input :last_remodel
= f.input :original_construction_year
嵌套路由路径采用多个参数Rails Guide。
你的情况应该是downtown_property_path(@downtown, property)
我想提供一个可以简化您的路由的答案。
如果您的物业只能引用一个市中心(根据您的控制器似乎是这种情况),那么您不需要 downtown/1/properties/8
等 URL。
要访问 ID 为 8 的 属性,您只需使用 properties/8
,因为在控制器操作中,您将能够加载相关的市区(id=1 ) 因为它在 属性 记录中被引用。 show
嵌套资源的操作通常不需要通过父级。
PS:当子资源(properties
在您的情况下)可以有多个父资源链接到它时(downtowns
),通过父资源访问嵌套资源最有用.