Rails collection_select 未获取 ID
Rails collection_select not getting an id
我想更多地了解 Rails 表单控件中的 collection_select 是如何工作的。
物品控制器
class ItemsController < ApplicationController
def index
@items = Item.all
end
def new
@item = Item.new
@categories = Category.all
end
def create
@item = Item.new(params.require(:item).permit(:name, :description, :category))
render plain: @item.inspect
# @item.save
# redirect_to my_page_path
end
def show
@item = Item.find(params[:id])
end
end
HTML
<div class="form-group">
<%= f.label :category %>
<%= f.collection_select(:category_ids, Category.all, :id, :name,
{ prompt: "Make your selection from the list below"}, { multiple: false, size: 1, class: "custom-select shadow rounded" }) %>
</div>
当我呈现代码时,我得到 category_id = nil
#<Item id: nil, name: "Yo", description: "Brand new", created_at: nil, updated_at: nil, category_id: nil>
谢谢....任何解释的帮助将不胜感激。
f.collection_select(:category_ids
第一个参数应该是:category_id
因为这是外键属性
我发现代码中有两个问题。您已经注意到对象上的 category_id
是 nil
。
查看 collection_select
帮助程序设置 category_ids
的表单,但您的模型的属性名为 category_ids
。只需删除复数 s
<%= f.collection_select(:category_id, Category.all, :id, :name,
# ... %>
另一个问题是控制器中 StrongParameters
的配置。强参数方法正在处理参数散列,并且不知道存在 category
关联并且该关联与 category_id
一起使用。因此,您需要精确并将 category_id
添加到列表中:
def create
@item = Item.new(params.require(:item).permit(:name, :description, :category_id))
render plain: @item.inspect
# @item.save
# redirect_to my_page_path
end
我想更多地了解 Rails 表单控件中的 collection_select 是如何工作的。
物品控制器
class ItemsController < ApplicationController
def index
@items = Item.all
end
def new
@item = Item.new
@categories = Category.all
end
def create
@item = Item.new(params.require(:item).permit(:name, :description, :category))
render plain: @item.inspect
# @item.save
# redirect_to my_page_path
end
def show
@item = Item.find(params[:id])
end
end
HTML
<div class="form-group">
<%= f.label :category %>
<%= f.collection_select(:category_ids, Category.all, :id, :name,
{ prompt: "Make your selection from the list below"}, { multiple: false, size: 1, class: "custom-select shadow rounded" }) %>
</div>
当我呈现代码时,我得到 category_id = nil
#<Item id: nil, name: "Yo", description: "Brand new", created_at: nil, updated_at: nil, category_id: nil>
谢谢....任何解释的帮助将不胜感激。
f.collection_select(:category_ids
第一个参数应该是:category_id
因为这是外键属性
我发现代码中有两个问题。您已经注意到对象上的 category_id
是 nil
。
查看 collection_select
帮助程序设置 category_ids
的表单,但您的模型的属性名为 category_ids
。只需删除复数 s
<%= f.collection_select(:category_id, Category.all, :id, :name,
# ... %>
另一个问题是控制器中 StrongParameters
的配置。强参数方法正在处理参数散列,并且不知道存在 category
关联并且该关联与 category_id
一起使用。因此,您需要精确并将 category_id
添加到列表中:
def create
@item = Item.new(params.require(:item).permit(:name, :description, :category_id))
render plain: @item.inspect
# @item.save
# redirect_to my_page_path
end