0

ちょっとした背景として、私は登録ユーザーがアートワークの報奨金を投稿できるシステムを作っています。彼らは自分の言いたいことを言い、それを報奨金として投稿して一般に公開します。ユーザーは、アーティストとしてシステムに登録することもできます。

しかし秘訣は、報奨金を投稿するユーザーが、報奨金を受け取ることができる登録アーティストのサブセットを指定できることです。フォームを介して賞金を獲得するために必要なのは、役立つツールだと思います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 を学んでおり、このような助けになるコミュニティがあることに感謝しています。前もって感謝します。

4

1 に答える 1

0

私が必要としているのは、単一のフォーム送信で複数 (0-n) のクラスを保存する手段です。

cocoon gem は、複数のネストされたフォームを作成するのに非常に役立ちます。ユーザーがクリックして複数のネストされたフォームを追加できるボタンを追加できるため、1 回の送信で必要な数まで作成できます。また、1 回の送信で必要な数だけ削除することもできます。

https://github.com/nathanvda/cocoon

宝石「繭」

于 2013-03-30T06:22:49.417 に答える