我有一个包含3个表的数据库:User,Card,Cardset:
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列。
在view 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]
我怎样才能让它发挥作用?