【问题标题】:Conditional partials when using Rails STI使用 Rails STI 时的条件部分
【发布时间】:2014-07-30 21:00:38
【问题描述】:

我有一个包含 2 种类型的客户表:个人和公司。 我希望能够根据我创建的客户端类型呈现不同的部分(具有不同的字段数)。

有什么帮助吗? 谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 partials sti


    【解决方案1】:

    您可以比较类型属性值并渲染所需的部分。或者为这两个模型使用不同的控制器和视图

    【讨论】:

    • 是的,但我想为新表单执行此操作,所以我认为目前还没有办法知道类型。不过,我有两种不同的路线。
    • @BogdanPopa 有什么问题吗?在对象初始化时,您应该具有类型值。
    • @BogdanPopa 仅当您在 Person 或 Company 模型上初始化对象时。如果您在 Client 模型上初始化对象,则类型将为 nil
    【解决方案2】:

    您应该有两个链接,创建人员和创建公司。当点击 Create Person 时,您仍然可以点击 new 页面,并且只需要一个类似 type=person 的参数(即 new_client_path(:type => "person"))。为公司做相反的事情。

    在您的控制器中,在每个控制器之间切换以创建初始的空对象。如果没有type 参数,或者它无效,则默认设置person 类型,然后照常继续。

    在您的new 页面上,您可以有一个大的if-else 来确定要显示哪些表单字段。或者更好的是,有两个部分,一个命名为_person_form,另一个命名为_company_form。然后在您的 new 页面中执行类似 render :partial => "#{@client.type}_form" 的操作,这样您就会得到正确的表单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 2013-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多