0

ルールとルールセットの2つのモデルがあり、どちらもhas_to_and_belong_to_manyの関係にあります。ルールは個別のルールであり、ルールセットは特定のルールのコレクションです。

ユーザーのダッシュボードには、ユーザーが作成したすべてのルールが表示されます。各ルールに「ルールセットにルールを追加」するボタンがあります。ボタンをクリックすると、ユーザーが既存のルールセットを選択して送信を押すことができる選択フォームが読み込まれ、ルールセットに追加されます。

私はレールにかなり慣れていないので、これを機能させる方法がわかりません。ルールに対して更新アクションを呼び出すと、更新フォーム全体が読み込まれますが、これは不要です。ユーザーがルールセットを選択して、そのルールをルールセットに追加できるようにしたいだけです。これが私のモデルです:

class Rule < ActiveRecord::Base
  attr_accessible :description, :user_id, :game_id, :ruleset_id
  has_and_belongs_to_many  :rulesets
  belongs_to :user
  belongs_to :game

  validates :description, presence: true
  validates :user_id, presence: true
  validates :game_id, presence: true

end


class Ruleset < ActiveRecord::Base
  attr_accessible :title, :game_id, :user_id, :rule_id

  validates :game_id, presence: true
  validates :user_id, presence: true
  validates :title, presence: true

  belongs_to :user
  belongs_to :game
  has_and_belongs_to_many :rules

end
4

1 に答える 1

0

ルールセットにルールを追加するには、コントローラーで特定のアクションを宣言する必要があります。

人がルールセットを選択すると、それがパラメーターとして渡され、新しく宣言されたアクションでそれをキャッチできます。また、rule_idを保存するhidden_​​field_tagを使用します。

新しく宣言されたアクションで、次のようなものを作成します。

def add_rule_to_ruleset
   @ruleset = Ruleset.find(params[:ruleset_id])
   @rule = Rule.find(params[:rule_id])

   @ruleset.rules << @rule
   redirect_to current_user.rules
end

また、選択ボックス内のすべてのルールセットをでフェッチしますcurrent_user.rulesetsが、そのルールセットにすでにそのルールがあるかどうかを確認する必要があると思います(同じルールセットで同じルールを2回以上使用したくないですか?)。変更する必要があります。

次のようなものでそれを確認してくださいcurrent_user.rulesets.include?(rule)

Routes.rb:

resources :rules do
  member do
    put 'add_rule_to_ruleset'
  end
end
于 2013-03-18T18:56:24.140 に答える