所以,基本上我的'index'动作是一个很长的元素列表,输出为带有Rails的表,每一个都有一个复选框。这些元素是目录中的项目,这些项目将成为报价中的行项目。
用户可以根据自己的喜好选择多个复选框,然后点击一个“创建新报价”的按钮,它将获取他们检查的项目并将其克隆到新表中,以便他们可以将其编辑为报价。
我遇到的问题是,当列表真的很长时,说6000条记录,这是一个非常长的列表加载,所以我想要分页,但是!然后我的复选框将无效,因为如果用户更改页面,它们将会消失。
此外,用户无法返回此页面以向报价添加更多项目。
我的第一个想法是当他们浏览到这个“索引页面并且基本上让用户编辑来自get go的引用”时创建一个新元素
有关此实施的任何想法?我对如何开始实现这一点感到困惑。
答案 0 :(得分:1)
这是一个经典的购物车类型问题。您可能希望阅读在Rails中使用会话实现这些内容。简单的例子是使用用户的会话。您可以创建一个类来封装逻辑,也可以只使用哈希或数组来保存已检查的ID。因此,当用户点击“开始新报价”时,您可以将其会话中的var设置为空白,如:
session[:new_quote_items] = []
然后,当他们检查项目时,您可以有一个链接将它们添加到报价中。然后,您可以将这些ID放入数组中。在页面显示可能的报价项目时,您可以向用户显示要检查的项目,然后在此列表中添加/删除ID。然后,当用户完成后,他们可以点击完成链接,该链接将从会话中获取ID并创建报价。
答案 1 :(得分:1)
此question与您的类似,涵盖了您的第一个问题。分页。
除此之外,在连接模型上巧妙使用accepts_nested_attributes_for将允许您简化向现有或新引号添加元素的过程。
抱歉,我现在没有代码,但这是一般性的想法:
生成一个QuoteItems列表,该列表是此报价的现有报价项集合的联合,以及为当前报价中不属于当前报价的项目的当前报价构建的报价项目。
将该列表提供给fields_for并设置每个field_for区域,以便它将item_id作为隐藏值传递并包含一个复选框,以便它们修改:_delete字段,默认值评估为true,并且检查值等于false