【问题标题】:How to use an create two instance in just one for, using two controllers如何使用一个创建两个实例,使用两个控制器
【发布时间】:2017-01-29 00:18:42
【问题描述】:

我是 Rails 新手,并且一直在学习一些缺乏实时网络应用程序完整性的教程。它们展示了如何在每个文件中使用模型视图控制器,但我还没有找到一个展示如何使用多个控制器的方法使用它们之间的关联创建各种模型的方法。

用例:

我有一个用户模型,一个关联的帐户模型。我在irb中测试过,但是在控制器中,我需要有一个User对象来关联用户和账号,但是在创建用户的时候,它只是用户的表单数据,由用户控制器管理,如图教程和帐户在它自己的视图中分开,由它自己的控制器管理。

创建帐户时,如何使用在用户控制器中创建的用户。我最想做的是,在创建用户时创建帐户,在同一个视图中。但我真正喜欢的是,它是一个教程,展示了如何完全控制视图和控制器,以及如何将这些元素融入您的设计。谢谢

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 associations polymorphic-associations belongs-to


    【解决方案1】:

    您正在寻找的可能是“嵌套属性”。

    这里是详细的文档:http://apidock.com/rails/ActiveRecord/NestedAttributes/ClassMethods/accepts_nested_attributes_for

    否则,您可能会遇到 Rails 作为 MVC 的特殊变体。您从其他控制器调用控制器操作 - 控制器处理对 Web 请求的响应,而不是与数据的交互。这是给模型的。

    很难说出您的要求,但我认为您实际上只是被意外的简单性绊倒了。您的 user-model0 中的所有内容都可以通过 User 对象/单例/类事物访问。例如,User.find(1)User 可在所有控制器和所有视图中访问(与 Account 一样)。只需在需要时使用它们!

    来自 cmets 的编辑:

    def action
      user = User.new(params[:user])
      user.save
    
      account = Account.new(params[:account])
      account.user = user
      account.save
    end
    

    但是!这种做事方式几乎不能很好地处理错误。您真正想要的是使用嵌套属性,这样您就可以将帐户创建为用户的一部分,反之亦然。

    【讨论】:

    • 您添加了一些我不知道的价值信息:“用户可在所有控制器中访问”。那么,我需要先创建一个用户,创建与该用户关联的帐户,然后保存该用户?我想,如果我保存用户,它将无法再访问,或者可以通过调用 User.last?
    • 嗯,有点。这些帐户将需要一个 user_id,并且在您保存用户之前不会存在。但是,当您保存它时,您不会失去对用户的访问权限......一秒钟,添加到答案。
    • 即使我没有在帐户视图表单中发送带有这些参数的表单,也可以访问“params[:user]”?
    • 它可以访问,但将为空。表单需要将信息放入 params 哈希的那部分,并且您需要通过安全性(def params,靠近控制器底部)传递该数据。
    • 我看到了一些可能的方法:""
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 1970-01-01
    相关资源
    最近更新 更多