Ruby on rails 创建用于将信息插入不同表的表单时出现问题

Ruby on rails 创建用于将信息插入不同表的表单时出现问题,ruby-on-rails,forms,Ruby On Rails,Forms,我基本上是一个Rails初学者,目前正在Rails2.2中开发一个相当复杂的Web应用程序 所以,在这个webapp中,有“工厂”。记住,不是设计模式,而是实际的工厂(这是一个游戏) 对于球员团队中的每个工厂,他都有很多选择 机器的维护水平 对工人的奖励 等等 我对此有两个问题: 这些都是复选框,该复选框需要默认为答案已存储在数据库中。我的意思是,如果玩家已经勾选了复选框,那么复选框必须已经在复选框中了(如果这篇文章让人困惑,那么很抱歉) 此信息存储在多个表中。工厂的维护级别保存在一个表中,

我基本上是一个Rails初学者,目前正在Rails2.2中开发一个相当复杂的Web应用程序

所以,在这个webapp中,有“工厂”。记住,不是设计模式,而是实际的工厂(这是一个游戏)

对于球员团队中的每个工厂,他都有很多选择

  • 机器的维护水平
  • 对工人的奖励
  • 等等
我对此有两个问题:

  • 这些都是复选框,该复选框需要默认为答案已存储在数据库中。我的意思是,如果玩家已经勾选了复选框,那么复选框必须已经在复选框中了(如果这篇文章让人困惑,那么很抱歉)
  • 此信息存储在多个表中。工厂的维护级别保存在一个表中,而给予工人的绩效奖金保存在另一个表中
  • 有人能帮我吗?这完全超出了我的想象

    谢谢大家。

    如果子实体(维护级别、性能等)链接到工厂,则可以使用嵌套模型表单

    你可以查看一些关于嵌套表单的信息,或者只是谷歌“rails嵌套表单”,你会得到大量的博客文章和教程

    --编辑
    看到您添加了使用rails 2.2,您可以尝试使用或创建嵌套表单(这只是一个建议,因为我不知道它是否有效)。我只能手动设置值来更新模型。

    要理解问题1,请保持简单,并假设要访问的属性在Factorys表中。因此,设计模式非常简单:

    数据库架构:

    create_table :factories do |t|
      t.boolean :now_operating, :default => true, :null => false
      ...
    
    控制器:

    def edit
      @factory = Factory.find(params[:id])
      if request.post?
        @factory.update_attributes(params[:factory])
      end
    end
    
    视图:

    {:action=>“edit”}do | f |%>
    ...
    
    您可以用更少的代码来实现这一点,事实上,如果您使用RESTful资源并遵循命名约定,则根本不需要代码,但这一点太神奇了,因为它隐藏了rails为您所做的事情

    即:get操作加载与传递给form_for的对象名匹配的对象时,rails将使用数据库中该对象的属性值填充表单字段。然后,当客户端提交表单时,rails将这些字段编码到请求中,作为该对象的参数,然后您可以在:post操作中更新这些字段。有关更详细的处理方法,请参见该官员

    如果这有点过于基本,我很抱歉,但获得基本模式很重要,因为解决问题2的一般方法是相同的:

  • 在:获取操作中加载对象
  • 渲染包含对象的窗体
  • 保存每个对象的参数
  • 对于具有多个对象的窗体,实际上有几种方法可以做到这一点。我建议您查看中第8项“构建复杂表单”下列出的各种教程

    最后要考虑的两点:

    • 你真的需要那些额外的桌子吗?如果每个维护行 包含单个项目的属性 工厂,这可能更有意义 只需将属性放入 factory表并简化您的表单 和行动
    • 属性,例如:维护级别可能更高 恰当地表示为 :带单选按钮的字符串类型 设置级别的窗体

    选项当前如何存储(复选框)-作为布尔值存储在表中?涉及的模型及其关系是什么?向我们展示更多的代码:您的模型看起来如何(特别是涉及的模型之间的关系),以及您的视图代码。我猜你在保存东西方面遇到了麻烦?
    <% form_for :factory, @factory, :url => { :action => "edit" }  do |f| %>
      <%= f.checkbox :now_operating %>
      ...