我正在关注Ryan Bate第285集的第一部分。不知道为什么它不起作用。这是代码:
模型:
class Comic < ActiveRecord::Base
has_many :comics_genres
has_many :genres, through: :comics_genres
end
class ComicsGenre < ActiveRecord::Base
belongs_to :genre
belongs_to :comic
end
class Genre < ActiveRecord::Base
has_many :comic_genres
has_many :comics, through: :comics_genre
end
创建新漫画的表格:
<%= form_for ([@user, @comic]) do |f| %>
<div><%= f.collection_select :genre_ids, Genre.order(:genre), :id, :genre, {}, {multiple: true} %></div>
<%= f.submit class: "btn btn-primary" %>
<% end %>
漫画控制员:
def create
@user = current_user
@comic = @user.comics.new(comic_params)
respond_to do |format|
if @comic.save
format.html { redirect_to @comic, notice: 'Comic was successfully created.' }
format.json { render action: 'show', status: :created, location: @comic }
else
format.html { render action: 'new' }
format.json { render json: @comic.errors, status: :unprocessable_entity }
end
end
end
def comic_params
params.require(:comic).permit(:id, :title, :synopsis,
comic_pages_attributes: [:comic_page_image],
comics_genres_attributes: [:genre_id, :comic_id])
end
在控制台中,我得到这样的记录:
问题是genre_id是零,但我不知道如何让它传递正确的值。
非常感谢!
答案 0 :(得分:1)
我明白了。感谢MrYoshi的参数。该表单提供了一系列类型id,我将其设置为变量@genre_ids。保存漫画后,我遍历该数组,并使用漫画ID保存每个类型ID,以创建comics_genres表的记录,这是漫画和流派的连接器。
令人困惑的部分是,在保存漫画之前保存ComicsGenre实例是不可能的,因为它只会在保存后生成漫画ID。
如果这不是最好的方法,请告诉我!我相信有更优雅的方式。
def create
@user = current_user
@comic = @user.comics.new(comic_params)
@genre_ids = params[:comic][:genre_ids]
respond_to do |format|
if @comic.save
@genre_ids.each do |genre_id|
ComicsGenre.create(:comic_id => @comic.id, :genre_id => genre_id)
end
format.html { redirect_to @comic, notice: 'Comic was successfully created.' }
format.json { render action: 'show', status: :created, location: @comic }
else
format.html { render action: 'new' }
format.json { render json: @comic.errors, status: :unprocessable_entity }
end
end
end