【问题标题】:Rails - Creating multiple models in one controllerRails - 在一个控制器中创建多个模型
【发布时间】:2014-06-18 17:01:08
【问题描述】:

这更多是设计问题,而不是技术问题。 我对 Rails 很陌生,并试图遵循它的指导方针:

我有一个名为“Foo”的模型以及“FooController”和一个“UserForm.html.erb”来创建重定向到 FooController#create..
的新 Foo 对象 当用户填写表单中的文本字段并提交它时,会在 FooController 类中调用“创建”操作,其中 Foo 模型被持久化到数据库中。

这一切都很简单,直到我添加了一个名为“Bar”的新模型:
bar 模型与“Foo”没有任何共同之处,除了提交它们的表单(“UserForm.html.erb”)现在有一些逻辑,如果用户输入一个特殊的字符串,如“Create Bar!”然后应该创建并保留一个 Bar 实例。
起初我想创建一个新的 BarController 并使用 redirect_to 方法从 FooController#create 重定向到 BarController#create 如果输入字符串是正确的,但这看起来非常丑陋..

类似这样的:

class FooController < ApplicationController
   def create
      if(params[:user_input] != "CreateBar!"
         redirect_to bar_create_path
      else
         Foo.create()
   end
end

所以现在我正在考虑在 FooController#create 操作中创建 Bar 对象,但是让一个控制器负责一个模型来创建其他模型仍然有点奇怪,因为它们都受视图:

class FooController < ApplicationController
   def create
      if(params[:user_input] != "CreateBar!"
         Bar.create()
      else
         Foo.create()
   end
end

我想这两种方式都可以,但是正确的导轨方式是什么?也许还有第三种我没有想到的方法?

【问题讨论】:

    标签: ruby-on-rails model-view-controller ruby-on-rails-4


    【解决方案1】:

    您不需要控制器来创建模型。您可以在同一个控制器中创建两个模型,它们都可以工作。

    例如阅读以下内容:

    Multiple Forms on one Ruby page using Rails 4

    有类似的问题:

    def update foo_bar
      if params[:bar]
        @foo = Bar.new(strong_foo_params)
        if @bar.save
           #whatever
        else
           #errors
        end
      else
        #actions for bar
      end
    end
    

    注意:

    如果您要同时创建两个条目,则必须将其包装在事务中,或者考虑到一个模型可以保存而其他模型可能不保存。

    另一种选择是在保存前询问 .valid。

    【讨论】:

    • 我强烈建议也为此设置一个明确的数据库事务,以防止以成功的 foo.save 和未成功的 bar.save 结束...
    • 我不明白他想同时创建两个模型。但如果他想要,他就会需要它。
    猜你喜欢
    • 1970-01-01
    • 2013-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多