gpt4 book ai didi

ruby-on-rails - 如何避免 ActiveRecord_Relation 的未定义方法 `id'?

转载 作者:数据小太阳 更新时间:2023-10-29 08:06:56 27 4
gpt4 key购买 nike

希望这不是一个重复的问题,因为我花了数周时间在 StackOverflow 上搜索答案,但没有找到解决我问题的方法。

我有一个 Ruby on Rails API(Ruby 1.9.3,Rails 4.0.0)并且正在使用 ActiveRecord 与我们的数据库进行交互。当请求检索当前计划的横幅时,它可以完美运行。但是,如果没有安排横幅,则会出现 500 响应:

undefined method `id' for #\u003cBanner::ActiveRecord_Relation:0x0000000628fba8\u003

我的理解是,这是因为在没有找到符合条件的记录时数据库查找的结果“nil”上尝试使用固有的“id”方法。我该如何优雅地处理这种情况,以免遇到 500 错误,以便我可以向请求者返回更礼貌的响应?

这是我的 Controller :

class BannersController < ApplicationController
load_and_authorize_resource

respond_to :json

# Look to see if any banners should be showing right now
def current
@banner = Banner.current
end
end

这是我的模型:

class Banner < ActiveRecord::Base
self.table_name = 'Banner'
self.primary_key = :BannerID

alias_attribute :name, :FriendlyName
alias_attribute :banner_html, :BannerHtml
alias_attribute :banner_image, :BannerImage
alias_attribute :start_date, :StartDate
alias_attribute :end_date, :EndDate
alias_attribute :is_active, :IsActive
alias_attribute :is_removed, :IsRemoved
alias_attribute :start_date_time, :StartDateTime
alias_attribute :end_date_time, :EndDateTime
alias_attribute :hidden_text, :HiddenText
alias_attribute :hidden_background_color, :HiddenBackgroundColor

# This returns nil if no banner is scheduled, which then causes the view to return a 500 response because it tries to invoke an "id" method
scope :current, -> { Banner.where("StartDateTime <= ? AND EndDateTime >= ? AND IsActive=1 AND IsRemoved=0 AND BannerType=1", Time.now.to_s(:db), Time.now.to_s(:db)).first }
end

注意:我尝试过使用 .find_by,也尝试过不使用 .first,但似乎仍然找不到解决方法。

这是我的观点:

json.extract! @banner, :id, :banner_html, :banner_image, :hidden_text, :hidden_background_color

json.request_id request.uuid

数据库表“Banner”的主键为“BannerID”。

感谢所有愿意花时间研究这个的人。我花了无数时间阅读并尝试一切以补救这种情况,但无济于事。

最佳答案

undefined method `id' for \u003cBanner::ActiveRecord_Relation:0x0000000628fba8\u003

The database table "Banner" has a primary key of "BannerID"

然后 whey 仍在使用 :id!变化

json.extract! @banner, :id, :banner_html, :banner_image, :hidden_text, :hidden_background_color

json.extract! @banner, :BannerID, :banner_html, :banner_image, :hidden_text, :hidden_background_color

小记:

按照惯例,属性应该在 snake_case 中。

关于ruby-on-rails - 如何避免 ActiveRecord_Relation 的未定义方法 `id'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44745805/

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