我的数据库中的表中有两个布尔字段。
两者都默认为FALSE
这就是我的观点
<%= label_tag(:post_draft, "Draft?") %>
<div class="ItemCheckboxAlign"><%= f.check_box :draft %></div>
如您所见,我有一个正常工作。是否可以关联其他布尔字段,因此如果选中,则值也会更改为TRUE? 我想保持这两个布尔字段值彼此完全分开,除了我试图用这一个复选框更新两个。
我的架构:
create_table "posts", :force => true do |t|
t.text "content"
t.integer "user_id"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.boolean "draft", :default => false
t.boolean "sendreminder", :default => false
end
如果在用户发布时选中了复选标记,我试图将底部的两个布尔字段更改为TRUE。我已经让“草稿”工作,但只是试图让另一个同时改变。
在下面的一些讨论之后,我正在尝试应用update_attribute(sendreminder, true)
方法。我怎样才能在我的模型中包含这个,只有当draft = true?
答案 0 :(得分:2)
您还可以向模型添加before_save
回调,并根据模型实例的新状态检查是否需要更新其他字段。
答案 1 :(得分:0)
在控制器上,您可以执行以下操作:
my_model = MyModel.find(params[:id])
my_model.assign_attributes(params[:my_model])
my_model.sendreminder = my_model.draft
if my_model.save
bla bla bla
else
bla bla bla
end
只需确保将MyModel替换为您正在使用的模型, bla bla bla 是伪代码:)
如果您希望每次保存模型时都使用相同的功能,则可以在模式上使用前置过滤器。
class Post < ActiveRecord:Base
before_save :associate_draft
def associate_draft
self.sendreminder = self.draft unless self.sendreminder == true
end
end
然后每次保存或更新模型时,都会执行该过滤器,并且post_draft的值将始终与draft相同。