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