【问题标题】:How can I populate a form with results from one table which can be edited and saved to another table如何使用一个表格的结果填充表格,该表格可以编辑并保存到另一个表格
【发布时间】:2015-12-11 05:46:09
【问题描述】:

迄今为止的答案都没有奏效,因此我重新编写了我的帮助请求。我希望更清楚我在挣扎什么

我想将表(Table1)返回的数组(Array1)中的字段移动到另一个数组(Array2)中,允许编辑并将每条记录写入Table2。

控制器中 /new_multiple 中所需的方法: 1. @tasks = Task.find(params[:task_ids]) # 返回多条记录 #:task_ids 是复选框标签
#从之前的表单返回 注意:这有效。 2. 将每个@tasks 移动到@event 并发送到现有的new.html.erb 表单以在创建之前进行编辑和/或确认,如下所示(??):

   @tasks.each do |task|
      @event = Event.new
      @event.location = task.task_location
      @event.description =  task.task_description
      event.start_date = start_date + task.days_from_from_start_task
      .....   more calculated fields
      ***send to form for edit, show, create and return for next record  (QUESTION 1 below)
   end

注意:*** 中的重定向和返回会转到表单,但数据不会显示在表单中。我还没有确定它是否真的返回。

问题: 1.有没有办法从控制器中的迭代中间调用一个表单,然后返回循环以获取其他记录? 2. 如果没有,我该怎么做(可以吗?) a) 将多个@tasks 记录移动到上面的@events 数组中(用于在表格中显示以进行编辑) b) 告诉系统数组的每一行都是要在提交时写入的新记录

背景:

我正在创建一个允许安排未来事件集的应用程序。相关任务(集)保存在一个表中,并指定从组中第一个任务开始的顺序和天数,以使该任务发生。

用户通过设置条件来启动流程 - 任务组和事件开始的开始日期。

然后使用 form_tag 将任务记录与计算的日期/时间一起显示在表单上的表格中。此时,它们看起来就像要创建的事件。每行都有一个复选框标签,用于选择组中的任务。在用户“勾选”了他们选择的事件(或全部)后,应用程序返回到控制器的一个名为 new_multiple_events 的方法

到目前为止,一切正常,我可以看到使用调试器在事件控制器中选择(勾选)的选定记录。

我现在想单独显示每条记录,并允许用户编辑事件发生的计算日期和时间以及一些其他字段,例如位置和注释等,然后提交记录以在事件中创建桌子。但这是我不明白的地方。 楷模: 任务表模型:

      task.task_description                     
      task.task_location                        
      task.task_notes                           
      task.days_from_start_task
      task.task_group_name

      Event table model:

      event.title = task.task_group_name
      event.location = task.task_location
      event.description = task.task_notes
      event.start_date = start_date + task.days_from_from_start_task
      etc...

我有一个表单,可以很好地将单个事件输入日历,我想将返回的任务数组(加上计算字段)中的数据移动到事件数组中,作为该表单的默认值,然后允许用户保存数据。

提前感谢您提供的任何帮助。

【问题讨论】:

标签: ruby-on-rails ruby activerecord


【解决方案1】:

我不知道您是如何在表单中预填充正在编辑/创建的事件,但您的代码表明您正在模型中执行此操作。但是,您应该在呈现表单之前在控制器中创建该逻辑,因此请执行以下操作:

events_controller.rb

def new
  task = Task.find(params[:task_id])
  @event = Event.new
  @event.title = task.task_group_name
  @event.location = task.task_location
  @event.description = task.task_notes
  @event.start_date = start_date + task.days_from_from_start_task
end

然后像往常一样使用您已经找到的表单声明创建表单:form_for @event do |f|

请考虑我使用了 params[:task_id],建议您为嵌套在任务下的事件设置路由,以便您的 url 结构看起来像(例如):/tasks/13/events/new

祝你好运

【讨论】:

  • 感谢您的回复,博盎司。我从以前的表单返回 :task_ids
  • 该评论还有更多内容:感谢您的回复,@bo-oz。我从以前的表单返回复数 :task_ids 因为用户将“勾选”几行。我尝试了两种类似的方法,方法是在控制器的 new_multiple 部分中进行迭代并重定向到 /new - 在 /new 中填充与在循环中填充然后重定向。我会再试一次,因为这可能是一个不相关的问题。如果它不起作用,我会再次用代码更新它
【解决方案2】:

我将关闭此问题,因为我没有收到相关答案。我想允许在将数据连同附加信息写入另一个表之前编辑一个表中的选定数据。为了解决这个问题,我将选定的数据保存到另一个表中,然后立即读取数据进行编辑/更新。对用户来说,它看起来是一样的。

【讨论】:

  • 这似乎不是您自己问题的答案,而是一种解决方法。即使这个问题是在一个多月前提出的,你也应该让它保持打开状态,而不是用不相关的答案关闭它。有人可能会出现并提供一个不仅对您有用,而且对其他人有用的答案。
猜你喜欢
  • 2011-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-03
  • 2012-04-24
  • 1970-01-01
  • 2013-12-02
  • 1970-01-01
相关资源
最近更新 更多