ruby-on-rails - 如何检查 Rails 更新操作中属性是否发生变化?

标签 ruby-on-rails actioncontroller

我正在尝试检查 - 某些(语言)属性是否已更改,以及它是否等于某个值,我需要将其更改为其他正确的值。

这是我的代码:

编辑:

    def update
@website = Website.find(params[:id])
@website.language = params[:website][:language]
if @website.language_changed?
  if params[:website][:language] == "Automatic (by user's browser language)"
    @website.language = full_language(request.env['HTTP_ACCEPT_LANGUAGE'].scan(/^[a-z]{2}/).first)
  end
end
respond_to do |format|
 if @website.save
   format.html { redirect_to @website, 
  notice: 'Note: code has been updated. Please replace the code you have on your website with the code below. Only then changes will take effect.' }
   end
  end
end

我的表格:

  <%= f.label "Website category"%>
  <%= f.select :category, options_for_select([
      "--- please select ---",
      "Banking",
      "Computers]) %>
  <%= f.label "Language preferences"%>
  <%= f.select :language, options_for_select([
       "--- please select ---",  
       "Automatic (by user's browser language)",
        "Arabic",
        "Chinese"]) %>

当我更改类别时 - 它将语言更改为默认语言。我怎样才能防止这种情况发生?

给我错误:

   undefined method `updated?' for "--- please select ---":String

我做错了什么?

最佳答案

我刚刚通过控制台尝试了此操作,当您执行诸如 @website.attributes = params[:website] 之类的批量属性更新时,ActiveRecord 似乎没有跟踪更改。执行类似 if @website.language != params[:website][:language] 之类的操作可能会更简单(当然,稍后将更新移到某个地方。)。我意识到有点难看,但它会起作用。当然,您始终可以考虑增强模型以跟踪大规模更新带来的变化。

关于字段更改 - 听起来您的选择列表未初始化为正确的值。如果@website.category的值为“foo”,那么当此页面加载时,选择列表应该选择“foo”。这似乎没有发生,因此当您提交表单并更新批量属性时,它会将类别属性更新为默认选择的任何列表项。

关于ruby-on-rails - 如何检查 Rails 更新操作中属性是否发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12729281/

相关文章:

ruby-on-rails - Rake:记录任何正在执行的任务

ruby-on-rails - 将 document.txt 中的特定行添加到具有特定 id 的注释字段,然后移至下一行?

javascript - 类型错误(参数 `content' 的预期哈希值(得到字符串)

ruby-on-rails - 程序 'rails' 当前未安装在 Rails 应用程序文件夹的根目录中

ruby-on-rails - 如果 before_action 返回 false 如何执行操作

ruby-on-rails - 在 ApplicationController 中注册不同类型的回调

html - 如何确定在 Controller 操作中呈现哪个 View

ruby-on-rails - 为什么在 Controller 被子类化时 Rails before_filter 被调用两次?

ruby-on-rails - Rails 5.0.0beta3:开发中的 ActionController::InvalidAuthenticityToken

ruby-on-rails - 按照建议添加急切负载后,Rails bullet gem 变慢