【问题标题】:Ruby on Rails: Form in multiple steps and form fields of mulltiple models in each stepRuby on Rails:多步表单,每一步表单多个模型的字段
【发布时间】:2014-08-25 10:36:12
【问题描述】:

我正在用 Ruby on rails 构建一个小型应用程序,我想在其中获取正在从一个地方移动(转移)到另一个地方的用户房屋的详细信息,并根据提供的详细信息生成订单。 我有一个流动的情况,我被卡住了,不知道如何让它工作。我是 Rails 新手,请帮助我。

假设我有以下模型

**State**   id:integer, name:string
has_many :cities

**City**   id:integer, name:string
belongs_to :state

**User**   user_id:integer, user_name:string, email:string, ph_no:string
has_many :houses

**House**  size:string, floor_no:integer, elevator:boolean, address:text, city_id:city, state_id:state 
belongs_to :user
has_many :items

**Item**  id:integer, name:string
belongs_to : house

**Order**  order_id:integer, user_id:user, house_id:house, Move_date:date

现在我想通过 3 个步骤从用户那里获取详细信息,然后根据给定的详细信息下订单。

**Form, Step 1** I want to take the following details from the following models

**User Model:** email, ph.no

**House Model** : size, floor_no, elevator, city_id

**Order Model**: move_date


 **Form, Step 2**

**Item model** : All items of the house given as check boxes

**Form, Step 3**

**User Model**: name

**House Model:** Address

Oder Model: Include all the remaining fields and create an order.

有人可以指导我的结构吗?比如,我的表单应该如何在每个步骤中提交,我应该在哪一步创建用户和房屋模型。

在第一步创建它们并在最后一步更新 - 如果是这样,我如何在第三步获取创建模型的 ID。

在最后一步创建它们,通过阶段将它们存储在哪里以及如何传递它们。

我只完成了基本的编码,例如单个模型和一些嵌套模型的形式。然而,这对我来说很棘手。

【问题讨论】:

  • 检查此 gem 一次 github.com/schneems/wicked
  • 嗨,Icicle,感谢您的链接,我已经检查了那个 gem,但我有一个疑问,我可以在给定的更新函数中更新多个模型吗?

标签: ruby-on-rails forms ruby-on-rails-4 model


【解决方案1】:

我曾经实施过三阶段注册表单,我相信这相当于您需要的。您只需要分阶段捕获信息。 我在单个表单中使用了一个滑块,并添加了三个带有通常的上一个和下一个按钮的幻灯片。

1.以 ONE 形式添加三张幻灯片
2. 仅当填写当前表单中的必填字段时才启用下一步按钮
3. 初始化滑块/轮播并通过禁用滑动和仅在单击下一个/上一个按钮时滑动来一次显示一个

我用anything slider

例如:-

首先,使用幻灯片并对其进行初始化

$('#slider').anythingSlider();

在您的视图中,在一个表单中添加三个滑块(多步)

<div id="slider">

<form action="/to_your_action" method="post">
  ##first slide
  <div id="slide_1">
    <%= render(:partial => 'first_partial') %> 
    ###add one button on this page
     <button type="button">next</button>  
  </div>

  ##second slide
  <div id="slide_2">
    <%= render(:partial => 'second_partial') %> 
    ###add two button on this page
    <button type="button">prev</button>  
     <button type="button">next</button>  
  </div>


  ##third slide
  <div id="slide_2">
    <%= render(:partial => 'third_partial') %> 
    ###add two button on this page
    <button type="button">prev</button>  
     <button type="button">next</button>  
  </div>
</form>
</div>

这里只有在所有必填字段都填满后才需要启用下一步按钮,这可以使用 js/jquery 轻松完成。

在控制器中

def create

##do necessary validation and create ELSE redirect to same form

end

要使用多个模型,您可以在每个滑块中使用模型的三种不同形式...例如滑块1的form_for中的模型1,滑块2的form_for中的模型2,滑块3的form_for中的模型3。 ..等等。要实现这一点,您只需要从控制器传递三个实例变量..例如@user..@address..@occupation_details 用于注册表格

【讨论】:

  • 嗨 Milind,Everythimg 看起来不错,但这是否解决了在每个步骤中更新多个模型的问题。我认为您只为 1 个模型做这件事。
  • 是的,你可以通过使用 accep_nested_attributes 并将它们包含在父表单中,或者使用三个不同模型的三个不同实例变量......我已经更新了我的答案......@Kranthi
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-19
  • 1970-01-01
  • 1970-01-01
  • 2017-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多