我在我的 Rails 应用程序中使用 STI:
class Project < ActiveRecord::Base
end
class Video < Project
end
我有以下路线:
resources :projects
resources :videos, :controller => "projects", :type => "video"
当我搜索我的路线时,我发现我应该能够发布到 /videos:
POST /videos(.:format) projects#create {:type=>"video"}
但是,当我访问 /videos/new 时,我注意到表单发布到 /projects
= form_for(@project) do |f|
... creates the following HTML ...
<form action="/projects" method="post" >
<!-- ommited -->
</form
我在 projects_controller 中的新操作如下所示:
def new
@project = params[:type].capitalize.constantize.new
end
def create
@project = params[:type].capitalize.contstantize.new(project_params)
end
我希望它发布到 /videos 而不是 /projects,因为当我们使用以 /videos 开头的 url 时,params[:type] 总是设置为“video”,而当我们使用以 /videos 开头的 url 时,它不会设置为任何内容与/项目。
更新:
我有一个临时修复:
= f.hidden_field :type
当 url 更改为 /projects 时有诀窍,但我宁愿将表单发布到 /videos...