我有两个示例类:
第一个
如果我的理解正确的话,这意味着我最终可以拥有带有许多书籍的标签以及带有许多标签的书籍。
我在books/new页面上有一个多选下拉菜单,可以将这些标签发送到控制器,但我不知道一旦它们到达控制器后该怎么做。
<div>
<%= form.label :tags, style: "display: block" %>
<%= select_tag :tags, options_from_collection_for_select(@tags, :id, :name), multiple: true, prompt: "Select Tags" %>
</div>
控制器如下所示:
def create
@Book = Book.new(book_params)
respond_to do |format|
if @book.save
format.html { redirect_to book_url(@book), notice: "Book was successfully created." }
format.json { render :show, status: :created, location: @book }
else
format.html { render :new, status: :unprocessable_entity }
format.json { render json: @book.errors, status: :unprocessable_entity }
end
end
end
当我用这个表单创建一本书时,当我在Rails控制台中检查最新的书时,它没有任何标签。
我试着把@ book.tag.build(tag_ids:book_params[“tags”])放到create方法中,但是没有成功,我觉得我找错了对象。
2条答案
按热度按时间iklwldmw1#
如果要将已有的标签分配给新的图书,可以在窗体中使用
select
方法当然,您可以从控制器传递
@tags
,而不是Tag.all
如果使用强参数,则需要在此处添加此参数,类似于
crcmnpdw2#
您可以在
Book
模型中添加accepts_nested_attributes_for :tags
。这样,当提交表单时,@book.save
将为params[:books][:tags]
中的标记创建关联参考:https://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html