ユーザー、カード、カードセットの 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]
どうすれば動作させることができますか?