Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在Rails 3中设置一个复选框,一次更新2个表字段?_Ruby On Rails_Ruby_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 如何在Rails 3中设置一个复选框,一次更新2个表字段?

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\

我的数据库中的表中有两个布尔字段

两者都默认为FALSE

这就是我的看法

<%= 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