首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多选择:附加一个额外的空id

多选择:附加一个额外的空id
EN

Stack Overflow用户
提问于 2017-10-12 15:21:00
回答 1查看 28关注 0票数 0

当我想要创建一本新书时,我需要将它附加到类别中。但是当我试图保存一本新书时,我得到了一个错误:“无法找到带有< id”=的类别。>我不知道为什么,除了我已经附加的id之外,还有一个id附加。这个id是空的( "“)。它看起来是这样的(”=> {"name“=> "12","category_ids”“=>”,"2","7",.)。请帮帮我。我的书记员:

代码语言:javascript
运行
复制
def new 
 @book = Book.new(book_params)
end

def create 
 @book = Book.new(book_params)
 @category = Category.find(id: params[:ids])
 BookCategory.create!(book: @book, category: @category)
 @book.save
end

private

def book_params
 params.require(:book).permit(:name, :author, :image, :description)
end

我的表格:

代码语言:javascript
运行
复制
    <%= form_for (@book) do |f| %>
      <%= f.collection_select :category_ids, Category.order(:name), :id, :name, {},{ multiple: :true } %><br>
    <% end %>

我的错误:在这里输入图像描述

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-12 15:55:22

如果正确设置了关联,则为:

代码语言:javascript
运行
复制
class Book < ApplicationRecord
  has_many :book_categories
  has_many :categories, through: :book_categories
end

class Category < ApplicationRecord
  has_many :book_categories
  has_many :books, through: :book_categories
end

class BookCategory < ApplicationRecord
  belongs_to :book
  belongs_to :category
end

对于每一个has_many关联,ActiveRecord都会创建一个_ids设置器和getter:

代码语言:javascript
运行
复制
@book = Book.find(1)
@book.category_ids 
# => [1, 2, 3]
@book.category_ids = [2,4]  # will add 4 and remove 1 and 3.

因此,您不需要手动设置关联,只需传递category_ids参数:

代码语言:javascript
运行
复制
def new 
 @book = Book.new # don't assign params in the new method!
end

def create 
  @book = Book.new(book_params)
  if @book.save
    redirect_to @book
  else
    render :new
  end
end

private

def book_params
  # category_ids: [] allows an array of scalar values
  params.require(:book)
        .permit(:name, :author, :image, :description, category_ids: [])
end

您的代码将无法工作,因为您使用的是.find和可以为零或空的数组param。

collection_select的options参数也是可选的:

代码语言:javascript
运行
复制
<%= form_for (@book) do |f| %>
  <%= f.collection_select :category_ids, Category.order(:name), :id, :name, { multiple: :true } %><br>
<% end %>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46713309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档