ちょっとした背景として、私は登録ユーザーがアートワークの報奨金を投稿できるシステムを作っています。彼らは自分の言いたいことを言い、それを報奨金として投稿して一般に公開します。ユーザーは、アーティストとしてシステムに登録することもできます。
しかし秘訣は、報奨金を投稿するユーザーが、報奨金を受け取ることができる登録アーティストのサブセットを指定できることです。フォームを介して賞金を獲得するために必要なのは、役立つツールだと思いますform_for
...
<%= form_for @bounty do |bounty_form| %>
<div class="field">
<%= bounty_form.label :name %>
<%= bounty_form.text_field :name %>
</div>
<div class="field">
<%= bounty_form.label :desc %>
<%= bounty_form.text_area :desc %>
</div>
...
この方法で Bounty クラスの新しいインスタンスを保存するのは簡単です。しかし、問題は、この賞金を保存するときにユーザーが (チェックボックスを介して) 選択したアーティストに応じて、Candidacies クラスの複数のインスタンスも保存したいということです。たとえば、システムに Artist1 と Artist2 の 2 人のアーティストしかいないとします。ユーザーは、1 つ、2 つ、どちらも選択しない、または両方を選択できる必要があり、報奨金と共に候補を作成する必要があります。
は知ってaccepts_nested_attributes_for
いますが、個人オブジェクトを保存する際に住所オブジェクトを作るなど、クラスの単一インスタンスを作成するのに便利なようです。私が必要としているのは、単一のフォーム送信で複数 (0-n) のクラスを保存する手段です。
ここにいくつかの参照があります:
報奨金は、名前、説明、価格などにすぎません。form_for が最初に作成されたのはこのテーブルです。
# == Schema Information
#
# Table name: bounties
#
# id :integer not null, primary key
# name :string(255) not null
# desc :text not null
# price_cents :integer default(0), not null
# price_currency :string(255) default("USD"), not null
# rating :boolean default(FALSE), not null
# private :boolean default(FALSE), not null
# url :string(255)
# user_id :integer not null
# accept_id :integer
# reject_id :integer
# complete_id :integer
# created_at :datetime not null
# updated_at :datetime not null
#
そして、ユーザーの送信に応じて、報奨金が保存されるときにデータを入力する必要があるのは、この小さな多対多の結合テーブルです。
# == Schema Information
#
# Table name: candidacies
#
# id :integer not null, primary key
# user_id :integer not null
# bounty_id :integer not null
# created_at :datetime not null
# updated_at :datetime not null
#
class Candidacy < ActiveRecord::Base
attr_protected :id, :user_id, :bounty_id
#Many to many join table between user and bounty.
belongs_to :user
belongs_to :bounty
validates :user_id, presence: true
validates :bounty_id, presence: true
end
最後に、システム内のアーティストは@artist
インスタンス変数によって提供されます。
要約すると、できれば form_for を使用して、賞金の 1 回の保存と共に (0-n) 候補を保存できる必要があります。
私はレールとプログラミング全般に非常に慣れていません。多くの人と同じように、私は開発への最初の取り組みとして Rails を学んでおり、このような助けになるコミュニティがあることに感謝しています。前もって感謝します。