form_for 具有多对多关系的命名空间资源
form_for with a namespaced resource with a many to many relationship
我无法获取 form_for 来处理具有我需要在表单中引用的多对多关系的命名空间资源。
这种关系是延伸影响许多 body 区域,而 body 区域可以有很多延伸。
这是资源:
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">]>
有没有人有任何建议可以帮助我?提前感谢您的宝贵时间!
ActionView::Template::Error: undefined method `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
但是,根据您的路线,您的表格是错误的。您似乎正在创建 new 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 %>
我无法获取 form_for 来处理具有我需要在表单中引用的多对多关系的命名空间资源。
这种关系是延伸影响许多 body 区域,而 body 区域可以有很多延伸。
这是资源:
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">]>
有没有人有任何建议可以帮助我?提前感谢您的宝贵时间!
ActionView::Template::Error: undefined method `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
但是,根据您的路线,您的表格是错误的。您似乎正在创建 new 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 %>