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