gpt4 book ai didi

ruby-on-rails - 与现有对象嵌套?

转载 作者:太空宇宙 更新时间:2023-11-03 16:03:17 26 4
gpt4 key购买 nike

我正在尝试构建一个表单,允许用户在创建新项目时选择多个标签,但不允许用户创建新标签。

我的模型是这样设置的:

Item
has_many :item_labels
has_many :labels, :through => :item_labels

ItemLabel
belongs_to :item
belongs_to :label

Label
has_many :item_labels
has_many :items, :through => :item_labels

有什么想法可以在不允许用户创建新标签的情况下在表单中创建这种关系吗? (标签创建仅由管理员完成。)

具体来说,我应该如何在 View 中设置表单,我应该对我的模型进行哪些更改? (accepts_nested_pa​​rameters 或其他指令)

最佳答案

我认为您不需要为此使用 accepts_nested_attributes。我还没有尝试过所有这些,所以 YMMV :)

以下是您在 Controller 中设置新项目的方法。我也设置了一个 @labels 实例变量,因为我将在 View 的 collection_select 中使用它:

# items_controller.rb
class ItemsController < ApplicationController
def index
@items = Item.all
end

def new
@item = Item.new
@labels = Label.all
end

def create
@item = Item.new(params[:item])

if @item.save
flash[:info] = 'Item successfully created.'
redirect_to items_path
else
@labels = Label.all
render :new
end
end
end

假设您的 Label 模型有一个 name 属性,您的表单可能如下所示:

# new.html.erb
<%= form_form @item do |f| %>
<!-- Other item fields go here -->

<%= f.label :label_ids %>
<%= f.collection_select :label_ids, @labels, :id, :name, {}, multiple: true %>

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

您可以阅读更多关于 collection_select 的内容了解更多相关信息。

关于ruby-on-rails - 与现有对象嵌套?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19986314/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com