0

我有两个模型,Rules 和 Ruleset,它们都具有 has_to_and_belong_to_many 关系。规则是单独的规则,而规则集是规则的特定集合。

用户的仪表板显示用户创建的所有规则。对于每个规则,我都有一个“将规则添加到规则集”的按钮。通过单击按钮,它应该加载一个选择表单,用户可以在其中选择他们现有的规则集并点击提交,瞧,它已添加到规则集中。

我只是不知道如何进行这项工作,因为我对 Rails 很陌生。如果我对规则调用更新操作,它会加载我不想要的整个更新表单。我只想让用户能够选择一个规则集,然后将该规则添加到规则集中。这是我的模型:

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

您应该在控制器中声明一个特定的操作以将规则添加到规则集中。

当一个人选择一个规则集时,它将作为参数传递,您可以在新声明的操作中捕获它。此外,使用 hidden_​​field_tag 来存储您的 rule_id。

在新声明的动作中,创建如下内容:

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,但我想您必须检查该规则集是否已经具有该规则(您不希望同一规则在同一规则集中两次或更多次,对吗?),所以你应该修改它。

用类似的东西检查一下current_user.rulesets.include?(rule)

路线.rb:

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