Rails中的嵌套资源4

时间:2016-04-24 06:59:53

标签: ruby ruby-on-rails-4

我正在尝试创建一个管理花园温度的Rails应用程序。我已经适当地设置了我的控制器和模型,以便为Grow - Tray - Plant提供资源。 成长有很多托盘 托盘有很多植物

我能够在每次成长中创建嵌套托盘。但我无法在指定的托盘中制作植物。

github repo

我收到以下错误: 未定义的方法`托盘' 这是我的工厂_form

<%= form_for([@grow, @grow.tray.plants.build]) do |f| %>
<div class="field">
    <%= f.label :title %><br>
    <%= f.text_field :title %>
  </div>
  <div class="field">
    <%= f.label :description %><br>
    <%= f.text_area :description %>
  </div>
  <div class="field">
    <%= f.label :tray_id %><br>
    <%= f.text_field :tray_id %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

路线看起来像这样:

resources :grows do
    resources :trays do
      resources :plants
    end
end

用于构建托盘的表单看起来像这样,它可以工作:

<%= form_for([@grow, @grow.trays.build]) do |f| %>

  <div class="field">
    <%= f.label :title %><br>
    <%= f.text_field :title %>
  </div>
  <div class="field">
    <%= f.label :description %><br>
    <%= f.text_area :description %>
  </div>
  <div class="field">
    <%= f.label :grow_id %><br>
    <%= f.text_field :grow_id %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

这是否是正确的方法?

1 个答案:

答案 0 :(得分:0)

如果成长has_many个托盘,那么@grow.tray将是未定义的(请注意单数)。

也许你应该在控制器中分配相关的托盘,因此可以在视图中适当地引用它:

@tray = @grow.trays.find(...)

我还建议避免嵌套路线超过两个级别。像这样的表单往往更难以管理多个嵌套。