form_for,具有多对多关系的命名空间资源

时间:2017-05-28 13:32:07

标签: ruby-on-rails namespaces many-to-many form-for

我无法使用form_for来处理命名空间资源,该资源具有我需要在表单中引用的多对多关系。

这种关系延伸影响许多身体部位,身体部位可以有很多延伸。

这是资源:

namespace :admin do
  resources :stretches, only: [:new, :create, :edit, :update, :destroy]
  resources :body_areas, only: [:new, :create]
end

这是form_for:

<%= form_for [:admin, @stretch, @body_area] do |f| %>
  <%= f.label :name %>
  <%= f.text_field :name %>

  <%= f.label :body_area_id %>
  <%= f.collection_select :body_area_id, BodyArea.all, :id, :name, prompt: 'Select a Body Area' %>

  <%= f.submit %>
<% end %>

我的控制员:

  def new
    @stretch = Stretch.new
    @body_area = BodyArea.all
  end

我得到的错误是:

ActionView::Template::Error:
   undefined method `to_key' for #<ActiveRecord::Relation [#<BodyArea id: 1, name: "Legs 1">]>

有没有人有任何可以帮助我的建议?提前感谢您的时间!

1 个答案:

答案 0 :(得分:0)

  

ActionView :: Template :: Error:未定义的方法`to_key'for   ActiveRecord :: Relation BodyArea id:1,name:“Legs 1”

我认为错误是由于@body_area = BodyArea.all造成的。它应该是@body_area = BodyArea.new

def new
  @stretch = Stretch.new
  @body_area = BodyArea.new
end

但是,根据路由,您的表单错误。您似乎正在创建新Stretch 。如果是这样,您的表单应如下所示

<%= form_for [:admin, @stretch] do |f| %>
  <%= f.label :name %>
  <%= f.text_field :name %>

  <%= f.label :body_area_id %>
  <%= f.collection_select :body_area_id, BodyArea.all, :id, :name, prompt: 'Select a Body Area' %>

  <%= f.submit %>
<% end %>