我有一个Rails应用程序,其组织模型可以存储我的应用程序中的几种不同类型的组织(分销商,经销商,客户等)的信息。
在此应用程序的早期阶段,使用一个控制器来执行此组织模型的所有CRUD操作,但随着应用程序的增长,需要为组织模型存储的每种组织类型实现单独的控制器(例如经销商控制员,经销商控制员等。)
我已经设法通过在form_for中使用url参数在表单中进行此工作,但是我遇到了使验证适用于create或update方法的问题。当我尝试渲染新的/编辑方法(有路由)作为无效/不完整模型的结果来显示验证时,我收到控制器的路由错误我试图创建/更新组织,看起来像:
No route matches {:controller=>"distributors"}
我的控制器创建/更新方法非常类似于vanilla Rails,类似于脚手架生成器生成的内容:
def create
@organization = Organization.new(params[:organization])
if @organization.save
redirect_to @organization, notice: t('flash.organization.created')
else
render action: 'new'
end
end
我已经确定我的问题出现在我尝试渲染“新”方法的行上,我猜测“新”太模糊了。我在这里尝试了几种不同的方法,包括......的变体。
render 'distributors/new'
...和...
render :new
......但这些似乎都不起作用。
我知道我在这里尝试做的事情是一种反模式,但有没有办法让这项工作成功?我不确定为什么会出现一个例外情况,表明这些路线不在适当的位置。我做错了什么?
提前致谢...
编辑:根据请求,添加来自routes.rb的条目和“rake routes”的输出......
routes.rb中的相关条目:
resources :distributors, :only => [:new, :create, :edit, :update]
“rake routes”的相关输出:
distributors POST /distributors(.:format) distributors#create
new_distributor GET /distributors/new(.:format) distributors#new
edit_distributor GET /distributors/:id/edit(.:format) distributors#edit
distributor PUT /distributors/:id(.:format) distributors#update
编辑2:
当我删除分销商路线的:only过滤器时,渲染新/编辑方法似乎有效。重新实现过滤器作为:除过滤器之外会重新引入问题。