我有一个STI模型
class Fruit < ActiveRecord::Base; end
class Apple < Fruit; end
class Orange < Fruit; end
和路线:
resources :fruits
resources :apples, controller: 'fruits', type: 'Apple'
resources :oranges, controller: 'fruits', type: 'Orange'
脚手架创建使用new_fruit_path
创建新水果的视图
当我转到localhost:3000\apples
并点击新按钮时,它会转到localhost:3000\fruits\new
页面。
有没有办法进入localhost:3000\apples\new
页面?我不想创建一个new_apple_path
感谢。
答案 0 :(得分:0)
请执行以下操作:
#config/routes.rb
resources :fruits #-> url.com/fruits/new
#app/controllers/fruits_controller.rb
class FruitsController < ApplicationController
def new
@type = params[:type].constantize if params[:type]
@fruit = @type.new
end
end
然后您就可以使用:
<%= link_to "New Apple", new_fruit_path(type: "apple") %>
......但在网址中看起来可能很糟糕:url.com/fruits/new?type=apple
-
相反,如果你遇到这样的问题,那么看看你的STI结构是明智的。您最好使用enum
,删除&#34;子类&#34;这个层将无缘无故地添加复杂性。
顺便说一下,如果您想使用路径助手并使其适应您传递的任何对象,您可以使用polymorphic_path
助手。
答案 1 :(得分:0)
由于您不想为新的特定产品创建新视图,因此您可以为所有STI继承的类呈现new
操作的公共视图,因此:
class FruitsController < ApplicationController
def new
# do something
render 'fruits/new'
end