我有一个包含 3 个表的数据库:用户、卡、卡组:
User has_many Cards
User has_many Cardsets
Card belongs_to User
Cardset belongs_to User
Card has_and_belongs_to_many Cardsets
Cardset has_and_belongs_to_many Cards
卡片基本上是一张“抽认卡”,它有 card.term 和 card.definition 列。
在登录用户可以创建新卡片的视图 card/new.html 中,我创建了以下表单:
<%= form_for(@card) do |f| %>
<%= f.label :term, "Termin" %>
<%= f.text_field :term %>
<%= f.label :definition, "Definicja" %>
<%= f.text_area :definition %>
<%= f.label :cardset, "Dodaj automatycznie do setu:" %>
<%= select("cardset", :id, current_user.cardsets.all.collect {|p| [ p.name, p.id ] }, {:include_blank => true}) %>
<br>
<%= f.submit "Dodaj kartę!", class: "btn btn-large btn-primary" %>
<% end %>
有问题的行是这样的:
<%= select("cardset", :id, current_user.cardsets.all.collect {|p| [ p.name, p.id ] }, {:include_blank => true}) %>
我希望这是一个下拉菜单,其中包含属于创建新卡的用户的所有集合。当用户从该列表中选择一个集合并单击提交时,将自动创建新卡片和所选卡片集之间的关系(多对多关系,表:Cards_Cardsets)。
在我的 card_controller 我有:
def create
@card = current_user.cards.build(params[:card])
@cardset = Cardset.find_by_id(params[:cardset])
@card.cardsets<<@cardset
if @card.save
flash[:success] = "Utworzono karte!"
render 'show'
else
flash.now[:error] = 'Uzupelnij pola.'
render 'new'
end
end
该行:
@cardset = Cardset.find_by_id(params[:cardset])
应该返回所选的卡组。但相反,它返回此错误:
Unknown key: id
app/controllers/cards_controller.rb:8:in 'create'
如果我像这样将 id 硬编码到这一行:
@cardset = Cardset.find_by_id(3)
然后它就起作用了。所以我猜这个问题是由这个表达式引起的:
params[:cardset]
我怎样才能让它工作?