内容复制到另一个表的属性在轨
我在Rails开发初学者,我目前在市场上的改进工作已经实现了,我被卡住。内容复制到另一个表的属性在轨
我想修改代码,以便它在其中被命名为“列表”另一个表的另一个属性名为“custom_field_values”的表的属性的复制内容。
我在custom_field_value模型写了这个代码:
before_validation :set_date_value
def set_date_value
@current_listing = Listing.where(id: listing_id).select(:valid_until)
@current_listing= date_value
end
出现了一些问题,因为表值接收空,而不是内容本身。 我也试着使用listing_controller来加入这两个表并分配值但没有任何反应,我仍然得到一个空值。
这里的方式是两个表模式:
表名:custom_field_values
id :integer not null, primary key
custom_field_id :integer
listing_id :integer
text_value :text(65535)
numeric_value :float(24)
date_value :datetime
created_at :datetime not null
updated_at :datetime not null
type :string(255)
表名:上市
id :integer not null, primary key
uuid :binary(16) not null
community_id :integer not null
author_id :string(255)
category_old :string(255)
title :string(255)
times_viewed :integer default(0)
language :string(255)
created_at :datetime
updates_email_at :datetime
updated_at :datetime
last_modified :datetime
sort_date :datetime
listing_type_old :string(255)
description :text(65535)
origin :string(255)
destination :string(255)
valid_until :datetime
delta :boolean default(TRUE), not null
open :boolean default(TRUE)
share_type_old :string(255)
privacy :string(255) default("private")
comments_count :integer default(0)
subcategory_old :string(255)
old_category_id :integer
category_id :integer
share_type_id :integer
listing_shape_id :integer
transaction_process_id :integer
shape_name_tr_key :string(255)
action_button_tr_key :string(255)
price_cents :integer
currency :string(255)
quantity :string(255)
unit_type :string(32)
quantity_selector :string(32)
unit_tr_key :string(64)
unit_selector_tr_key :string(64)
deleted :boolean default(FALSE)
require_shipping_address :boolean default(FALSE)
pickup_enabled :boolean default(FALSE)
shipping_price_cents :integer
shipping_price_additional_cents :integer
availability :string(32) default("none")
这里是校正,使用发现,而不是在那里找到一个记录,其中将返回记录集,并可以访问模型采用自内列字段
before_validation :set_date_value
def set_date_value
@current_listing = Listing.find_by(id: self.listing_id)
# if find successfully (not nil)
if @current_listing
@current_listing.valid_until = self.date_value
end
end
如果没有发现上市通过'Listing.find',代码将抛出一个ActiveRecord :: RecordNotFound错误。所以不用检查'if @ current_listing'。你可以做'Listing.find_by(id:self.listing_id)'然后检查@current_listing。 –
感谢,与.find_by_id – widjajayd
find_by_id工作正常,但有利于更灵活的语法,就像find_by是被反对的修正(ID:SOME_ID)。干杯。 –
我的解决方案是,您应该使用列表关联而不是单独查询Listing
,并使用实例变量来保存它。
def set_date_value
listing.valid_until = date_value if listing
end
这将使用belongs_to :listing
关联设置valid_until列,更简洁。
感谢您使用这个解决方案,但是我使用了它,并且在valid_date中获得了空值。我尝试将另一个custom_field_value模型的静态值传递给列表表,仍然是Null值。 –
如果你得到零,模型中肯定有一些问题。可以提供更多信息,也许会显示更多的模型代码。你如何获得价值? –
我可以通过一个短暂的Skype会话帮助您 –
我明白你的问题。但是,您能否公开更多模型代码,以便我可以给您最好的答案? 现在,你可以写 '@current_listing = Listing.where(ID:listing_id)。选择(:valid_until)' '@current_listing.date_value = date_value' '@ current_listing.save' –