Ich möchte ein Formular für Einträge erstellen, in dem ein paar contest_questions vom Benutzer vorhergesagt werden.Verschachtelte Formularfragen basierend auf einem dritten Modell erstellen
Das bedeutet, ich möchte dynamisch die contest_questions im Zusammenhang mit dem Tippgeber-Wettbewerb abrufen und dann den Benutzer einen Eintrag mit Vorhersagen für jede dieser Fragen registrieren lassen.
Wie kann ich das tun? Ab jetzt habe ich die Felder zeigen sich nicht, da <%= f.fields_for :predictions do |prediction| %>
nicht innerhalb des contest_question Block ausführt und wenn ich es contest_question.fields_for ...
ändern bekomme ich ein
nicht definierte Methode `fields_for‘ für #
tipster_contest .rb
class TipsterContest < ActiveRecord::Base
belongs_to :bookmaker
belongs_to :game
has_many :entries
has_many :contest_questions
extend FriendlyId
friendly_id :name, use: [:slugged, :history]
enum status: { "Scheduled" => 0, "Open" => 1, "Closed" => 2, "Graded" => 3 }
scope :published?, -> { where(published: :true) }
end
entry.rb
class Entry < ActiveRecord::Base
belongs_to :user
belongs_to :tipster_contest
has_many :predictions
accepts_nested_attributes_for :predictions
end
contest_question.rb
class ContestQuestion < ActiveRecord::Base
belongs_to :tipster_contest
has_many :predictions
end
prediction.rb
class Prediction < ActiveRecord::Base
belongs_to :entry
has_one :contest_question
end
_form.html.erb
<%= form_for(@entry) do |f| %>
<% @contest.contest_questions.order(name: :asc).each do |contest_question| %>
<%= f.fields_for :predictions do |prediction| %>
<div class="field">
<%= prediction.label contest_question.name %>
<%= prediction.select(:prediction, @contest.teams) %>
</div>
<div class="field">
<%= prediction.label :wager_amount %>
<%= prediction.input :wager_amount %>
</div>
<% end %>
<% end %>
<div class="actions">
<%= f.submit "Save entry", :class => "btn btn-success" %> <%= link_to 'Back', bets_path, :class => "btn btn-danger" %>
</div>
<% end %>
und der relevante Teil meiner schema.rb wenn das erforderlich wäre:
create_table "contest_questions", force: true do |t|
t.integer "tipster_contest_id"
t.string "name"
t.string "result"
t.integer "min_wager"
t.integer "max_wager"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "entries", force: true do |t|
t.integer "user_id"
t.integer "tipster_contest_id"
t.integer "bankroll"
t.integer "won"
t.string "currency"
t.boolean "entry_valid"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "predictions", force: true do |t|
t.integer "entry_id"
t.integer "contest_question_id"
t.string "prediction"
t.integer "wager_amount"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "tipster_contests", force: true do |t|
t.integer "bookmaker_id"
t.integer "game_id"
t.string "name"
t.string "tournament"
t.integer "status", default: 0
t.text "rules"
t.integer "prizepool"
t.string "currency"
t.text "payout_structure"
t.integer "tipster_wallet"
t.string "teams", default: [], array: true
t.datetime "registration_open"
t.datetime "registration_close"
t.boolean "published", default: false
t.datetime "created_at"
t.datetime "updated_at"
t.string "logo"
t.text "description"
t.string "slug"
end
add_index "tipster_contests", ["slug"], name: "index_tipster_contests_on_slug", using: :btree