为具有多个控制器的模型创建/更新验证

时间:2015-07-07 00:41:26

标签: ruby-on-rails ruby-on-rails-3 activerecord

我有一个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过滤器时,渲染新/编辑方法似乎有效。重新实现过滤器作为:除过滤器之外会重新引入问题。

0 个答案:

没有答案