1

我有一个包含 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]

我怎样才能让它工作?

4

0 回答 0