Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 未调用保存之前的Rails_Ruby On Rails_Ruby_Activerecord_Model_Associations - Fatal编程技术网

Ruby on rails 未调用保存之前的Rails

Ruby on rails 未调用保存之前的Rails,ruby-on-rails,ruby,activerecord,model,associations,Ruby On Rails,Ruby,Activerecord,Model,Associations,我有一个ActiveRecord模型“offer”,它属于item的两个实例。项目属于用户 该报价模型具有以下特点: 提供的\u项目\u id 接收\u项目\u id 提供用户id 接收用户id 在创建模型的过程中,我希望Rails通过读取条目ID并处理该关系来保存用户 我得到了这个: class Offer < ActiveRecord::Base attr_accessible :offered_item_id, :receiving_item_id, :state b

我有一个ActiveRecord模型“offer”,它属于item的两个实例。项目属于用户

该报价模型具有以下特点:

提供的\u项目\u id 接收\u项目\u id 提供用户id 接收用户id

在创建模型的过程中,我希望Rails通过读取条目ID并处理该关系来保存用户

我得到了这个:

class Offer < ActiveRecord::Base

  attr_accessible :offered_item_id, :receiving_item_id, :state

    belongs_to :offering_user, class_name: "User"
  belongs_to :receiving_user, class_name: "User"
  belongs_to :offered_item, class_name: "Item"
  belongs_to :receiving_item, class_name: "Item"

  before_save :populate_user_ids

  private
        def populate_user_ids
            self.receiving_user_id = self.receiving_item.user.id
            self.offering_user_id = self.offered_item.user.id
        end 

end
抱歉,我对Rails还很陌生

有什么问题吗


谢谢

啊,我是个轻佻的人

我使用的是:

let!(:offer) { offered_item.offers_made_with.build(receiving_item_id: receiving_item.id) }
而不是:

let!(:offer) { offered_item.offers_made_with.create(receiving_item_id: receiving_item.id) }

build
不保存,
create
保存。

您需要让Rails处理
所属的
中的id,并且
有许多关系。你读过吗?是的,我已经为这些项目做过了,但我不想让用户在公共界面上访问(以避免大规模分配),所以我试图将这些设置在场景后面。我不确定你的意思。Rails确实是在“幕后”完成的,您可以控制用户在视图中看到的内容。但是对于您最初的问题,您是否尝试在保存之前将
放入
,以查看是否正在调用它?很难说可能会发生什么,因为不知道控制器的外观。您在尝试保存报价时是否出错?不,没有错误,我假设是!(:offer){offered_item.offeres_made_with.build(receiving_item_id:receiving_item.id)}调用保存权限吗?
let!(:offer) { offered_item.offers_made_with.create(receiving_item_id: receiving_item.id) }