Ruby on rails 如何在Rails 3中设置一个复选框,一次更新2个表字段?
我的数据库中的表中有两个布尔字段 两者都默认为FALSE 这就是我的看法Ruby on rails 如何在Rails 3中设置一个复选框,一次更新2个表字段?,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我的数据库中的表中有两个布尔字段 两者都默认为FALSE 这就是我的看法 <%= label_tag(:post_draft, "Draft?") %> <div class="ItemCheckboxAlign"><%= f.check_box :draft %></div> 如果在用户发布时选中复选标记,我将尝试将底部的两个布尔字段更改为TRUE。我已经有了一份“草稿”,但我只是想马上修改另一份 在下面的一些讨论之后,我尝试应用update\
<%= label_tag(:post_draft, "Draft?") %>
<div class="ItemCheckboxAlign"><%= f.check_box :draft %></div>
如果在用户发布时选中复选标记,我将尝试将底部的两个布尔字段更改为TRUE。我已经有了一份“草稿”,但我只是想马上修改另一份
在下面的一些讨论之后,我尝试应用
update\u属性(sendreminder,true)
方法。我如何才能在模型中包含此项,使sendreminder=true(仅当draft=true时)?在控制器上,您可以执行以下操作:
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是伪代码:)
如果希望在每次保存模型时都使用相同的方法,则可以在模式上使用before过滤器
class Post < ActiveRecord:Base
before_save :associate_draft
def associate_draft
self.sendreminder = self.draft unless self.sendreminder == true
end
end
class Post
然后,每次保存或更新模型时,都会执行该过滤器,并且“后期草稿”的值将始终与“草稿”的值相同。您还可以在“保存”之前向模型添加一个
回调,并检查是否需要更新其他字段,基于模型实例的新状态。因此,无法仅关联此代码中的第二个字段
?我已经用模式更新了原始帖子,请进一步澄清我在更新代码中的问题,我是否应该在:associate_draft
中将“sendreminder”值设置为与“draft”相同?我忘了提及-我需要将一些帖子的“draft”值设置为FALSE(在我手动查看后,同时保留“发送提醒”为真)但是在保存之前使用:associate_draft
会阻止我这样做。我如何解决这个问题?如果是这种情况,请忘记保存之前并更新控制器上的值,以便以后您可以以任何方式设置draft和sendreminder的值。如果您想保存模型而不调用before_save筛选器,您可以可以使用“方法更新”属性:为了澄清,“草稿”值是临时的,“发送提醒”值是永久的。我在我的Post控制器中定义了一个方法,用于生成“草稿”“值更改回false,但在添加了before\u save
之后,我现在无法执行此操作。我正在尝试在我的模型中使用此before\u save
回调,它使两个表字段相等,以便正常工作。然而,它导致了一个问题。我需要在手动审阅后将其中一个名为“draft”的字段更新回FALSE,同时将第二个名为“SendRemembers”的字段永久保留为TRUE,但在保存之前,此可防止任何此类情况发生。当我试图使“draft”值变回false时,什么也没有发生。你知道这个问题是否可以解决吗?
class Post < ActiveRecord:Base
before_save :associate_draft
def associate_draft
self.sendreminder = self.draft unless self.sendreminder == true
end
end