該協會工作正常,因爲我可以在IRB上玩它。我也可以編輯現有書籍添加標籤,但我不能創建並同時分配標籤(「標籤無效」驗證錯誤)。我想這是一個表單/控制器問題,我想我必須建立它,但我不知道如何。軌道上多重選擇形式多態關聯
## Tag model (:tags)
belongs_to :genre
belongs_to :taggable, polymorphic: true
## Genre model (:genres)
has_many :tags
has_many :taggables, through: :tags
## Serie model (:series)
has_many :tags, as: :taggable, dependent: :destroy
has_many :genres, through: :tags
## Book model (:books)
has_many :tags, as: :taggable, dependent: :destroy
has_many :genres, through: :tags
Series_Controller
before_action :select_genre
[...]
def new
@series = current_user.series.build
end
def edit
end
def create
@serie = current_user.series.build series_params
@serie.save
redirect_to admin_series_path
end
end
[...]
# Useful
def select_genre
@genres = Genre.all
end
形式
<select name="serie[genre_ids][]" multiple="multiple">
<% @series.each do |serie| %>
<option value="<%= serie.id %>"><%= serie.name %></option>
<% end %>
</select>
編輯:謝謝@Fabrizio Bertoglio,它的工作原理罰款單的選擇,但我不能讓它適用於多種流派。
# SERIES CONTROLLER
def new
@series = current_user.series.build
@series.tags.build
end
# PARAMS
params.require(:serie).permit ...... tags_attributes: [ :genre_id ]
# GENRE MODEL
** adding 'optional: true' to 'belongs_to :taggable' **
形式
<select name="serie[tags_attributes][0][genre_id]">
<% @series.each do |serie| %>
<option value="<%= serie.id %>"><%= serie.name %></option>
<% end %>
</select>
正如我所說的它工作正常,但如果我換genre_id
與genre_ids
它停止工作,而不是讓用戶選擇多個流派,並創建多個標籤之前。
# CONTROLLER
params.require(:serie).permit ...... tags_attributes: [ { genre_ids: [] } ]
# FORM
<select name="serie[tags_attributes][0][genre_ids][]" multiple="multiple">
請同時顯示'series_params'的方法定義 – bitsapien