使用Rails 3更新模型中的单个属性

时间:2013-03-18 18:41:36

标签: ruby-on-rails rails-activerecord

我有两个模型,规则和规则集都有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

1 个答案:

答案 0 :(得分: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)

之类的内容进行检查

routes.rb中:

resources :rules do
  member do
    put 'add_rule_to_ruleset'
  end
end