将一个表的属性的内容复制到rails中的另一个表的属性

时间:2017-08-27 12:53:43

标签: mysql ruby-on-rails activerecord model-view-controller

我是rails开发的初学者,我目前正致力于已经实施的市场上的增强功能,而且我被卡住了。

我想修改代码,以便在另一个名为“listing”的表的另一个属性中复制名为“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

但出了点问题,因为表值接收Null而不是内容本身。 我还尝试使用listing_controller来连接两个表并分配值,但没有任何反应,我仍然得到一个Null值。

顺便说一下,这是两个表模式:

表名: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")

2 个答案:

答案 0 :(得分:0)

这里是修正,使用find而不是在哪里找到一条记录,在哪里会返回记录集合,并在模型内部访问列字段使用self

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

答案 1 :(得分:0)

我的解决方案是你应该使用列表关联而不是单独查询const createBoard = ({width,height}) => Array.from( {length: height}, (...b) => Array.from( {length: width}, (...a) =>checkEdge(...a, ...b, width, height) ) ); 并使用实例变量来保存它。

Listing

这将使用def set_date_value listing.valid_until = date_value if listing end 关联来设置valid_until列,并且更简洁。