gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 22:27:40 24 4
gpt4 key购买 nike

我正在尝试检查 - 是否更改了某些(语言)属性,如果它等于某个值,我需要将其更改为其他适当的值。

这是我的代码:

编辑:

    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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com