内容复制到另一个表的属性在轨

内容复制到另一个表的属性在轨

问题描述:

我在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") 
+0

我明白你的问题。但是,您能否公开更多模型代码,以便我可以给您最好的答案? 现在,你可以写 '@current_listing = Listing.where(ID:listing_id)。选择(:valid_until)' '@current_listing.date_value = date_value' '@ current_listing.save' –

这里是校正,使用发现,而不是在那里找到一个记录,其中将返回记录集,并可以访问模型采用自内列字段

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

如果没有发现上市通过'Listing.find',代码将抛出一个ActiveRecord :: RecordNotFound错误。所以不用检查'if @ current_listing'。你可以做'Listing.find_by(id:self.listing_id)'然后检查@current_listing。 –

+0

感谢,与.find_by_id – widjajayd

+0

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列,更简洁。

+0

感谢您使用这个解决方案,但是我使用了它,并且在valid_date中获得了空值。我尝试将另一个custom_field_value模型的静态值传递给列表表,仍然是Null值。 –

+0

如果你得到零,模型中肯定有一些问题。可以提供更多信息,也许会显示更多的模型代码。你如何获得价值? –

+0

我可以通过一个短暂的Skype会话帮助您 –