Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rails复杂的形式和构建顺序_Ruby On Rails_Ruby_Forms_Nested_Nested Forms - Fatal编程技术网

Ruby on rails rails复杂的形式和构建顺序

Ruby on rails rails复杂的形式和构建顺序,ruby-on-rails,ruby,forms,nested,nested-forms,Ruby On Rails,Ruby,Forms,Nested,Nested Forms,我有一个复杂的形式类似于最近的 但是,嵌套元素可以正常工作。我正在创建或更新一个数据网格,比如通过一个表单,其中输入了当天的价格。我的问题从他们留下一个空白开始。我有嵌套的_attributes_for选项,用于不保存nils,它可以工作,如果它们只在特定行中保存一个值,它会保存正确的日期,但是当重新加载时,它会将其放置在错误的列中。我不知道如何将一行中的值排序到表单中。IE星期三的保存值将显示在(正确行的)星期一列中。如果他们为一行保存了所有值,则不会发生这种情况(这样就可以完美地工作) 数据

我有一个复杂的形式类似于最近的

但是,嵌套元素可以正常工作。我正在创建或更新一个数据网格,比如通过一个表单,其中输入了当天的价格。我的问题从他们留下一个空白开始。我有嵌套的_attributes_for选项,用于不保存nils,它可以工作,如果它们只在特定行中保存一个值,它会保存正确的日期,但是当重新加载时,它会将其放置在错误的列中。我不知道如何将一行中的值排序到表单中。IE星期三的保存值将显示在(正确行的)星期一列中。如果他们为一行保存了所有值,则不会发生这种情况(这样就可以完美地工作)

数据像这样存储在数据库中

ID对象\u ID DAYOFWEEK PRICE
并显示如下

+------+----------------+-------+-------+-------+------+-------+
| id   | name           | Mon   | Tue   | Wed   | Thu  | Fri   | -> +2 more days etc
+------+----------------+-------+-------+-------+------+-------+
| 1234 | Some name      | 87.20 | 87.20 | 87.20 | 82.55| 85.48 |
+------+----------------+-------+-------+-------+------+-------+
| 1234 | Some name      | 87.20 | 87.20 | 87.20 | 82.55| 85.48 |
+------+----------------+-------+-------+-------+------+-------+
| 1234 | Some name      | 87.20 | 87.20 | 87.20 | 82.55| 85.48 |
+------+----------------+-------+-------+-------+------+-------+
构建或显示这些值的控制器代码如下所示:

控制器 rooms.html.erb 在控制台中订购
错误是在创建表单时发生的-因为您需要根据房间价格的顺序来确定是否正确,所以需要将空(已建)价格放在正确的位置。如果每个房间都有多个房价,则需要生成表单,以便房价在一周中的正确日期。此代码将在新阵列中构建该阵列,并正确设置新阵列:

@rooms.each do |r|
  new_rates = []
  (0..6).each { |dow|
    rate = r.room_rates.find_by_dayofweek(dow)
    if rate
      new_rates << rate
    else 
      new_rates << r.room_rates.build(:dayofweek => dow)
    end
  }
  r.room_rates = new_rates
end

和/或。。。如果有某种验证可以对整行数据执行,我可以。我怎么能只接受整行或根本不接受?我不知道如何处理为每行创建的7条单独记录。对不起,我应该更清楚,记录中没有不同的字段,而是多条记录。我在帖子的底部添加了费率模型。不过,您添加的第二部分我认为也可能有效。我尝试过类似的事情,但仍然没有得到正确的形式上的顺序-(我已经根据问题中的附加信息编辑了我的答案。第一个看起来应该可以很好地工作。但是它仍然没有正确地排列顺序。我不确定是否还有其他事情发生,但我会尝试在控制台上进行。它似乎在控制台中工作,我在上面的问题中添加了我的结果。因此,有些事情发生了。)表单中可能有错误。您可以在rails控制台中尝试吗?上面粘贴的结果看起来像SQL结果,如果第一个结果正在生成,我会感到惊讶。在任何情况下,您都可能需要添加:order=>“dayofweek”。
<% @dow = 0 %>
  <tr class="room">
 <td><%= f.text_field :name %></td>

 <% f.fields_for :room_rates do |rates| %>
  <%= render 'rates', :f => rates %>

  <% @dow += 1 %>
 <% end %>

 <td class="delete_mode" style="display:none;">
  <%= f.hidden_field :_destroy %>
  <%= link_to_function "remove", "remove_room(this)" %>
 </td>
  </tr>
<td> 
 <%= f.text_field :price, :size => 3 %>
 <%= f.hidden_field :dayofweek, :value => @dow %> 
 <%= f.hidden_field :source, :value => 0 %>
</td>
+-------+---------+-----------+-------+--------+---------------------------+---------------------------+
| id    | room_id | dayofweek | price | source | created_at                | updated_at                |
+-------+---------+-----------+-------+--------+---------------------------+---------------------------+
| 92745 | 8       | 0         | 1.0   | 0      | 2010-02-23 14:33:05 +0100 | 2010-02-23 14:33:05 +0100 |
| 92746 | 8       | 1         | 2.0   | 0      | 2010-02-23 14:33:05 +0100 | 2010-02-23 14:33:05 +0100 |
| 92747 | 8       | 2         | 3.0   | 0      | 2010-02-23 14:33:05 +0100 | 2010-02-23 14:33:05 +0100 |
| 92748 | 8       | 3         | 4.0   | 0      | 2010-02-23 14:33:05 +0100 | 2010-02-23 14:33:05 +0100 |
| 92749 | 8       | 4         | 5.0   | 0      | 2010-02-23 14:33:05 +0100 | 2010-02-23 14:33:05 +0100 |
| 92750 | 8       | 5         | 6.0   | 0      | 2010-02-23 14:33:05 +0100 | 2010-02-23 14:33:05 +0100 |
| 92751 | 8       | 6         | 7.0   | 0      | 2010-02-23 14:33:05 +0100 | 2010-02-23 14:33:05 +0100 |
| 92752 | 9       | 3         | 5.0   | 0      | 2010-02-23 14:33:33 +0100 | 2010-02-23 14:33:33 +0100 |
+-------+---------+-----------+-------+--------+---------------------------+---------------------------+
+---------+-----------+-------+--------+---------------------------+---------------------------+
| room_id | dayofweek | price | source | created_at                | updated_at                |
+---------+-----------+-------+--------+---------------------------+---------------------------+
| 2517    | 0         |       |        |                           |                           |
| 2517    | 1         |       |        |                           |                           |
| 2517    | 2         | 3.0   | 0      | 2010-02-23 17:54:28 +0100 | 2010-02-23 17:54:28 +0100 |
| 2517    | 3         | 4.0   | 0      | 2010-02-23 17:54:28 +0100 | 2010-02-23 17:54:28 +0100 |
| 2517    | 4         |       |        |                           |                           |
| 2517    | 5         |       |        |                           |                           |
| 2517    | 6         |       |        |                           |                           |
+---------+-----------+-------+--------+---------------------------+---------------------------+
@rooms.each do |r|
  new_rates = []
  (0..6).each { |dow|
    rate = r.room_rates.find_by_dayofweek(dow)
    if rate
      new_rates << rate
    else 
      new_rates << r.room_rates.build(:dayofweek => dow)
    end
  }
  r.room_rates = new_rates
end
// In room model 
has_many :rates, :order => "dayofweek"

// In controller
@rooms.each do |r|
  (0..6).each { |dow|
    if not r.room_rates.find_by_dayofweek(dow)
      r.room_rates.build(:dayofweek => dow)
    end
  }
end