Bea*_*ech 2 ruby ruby-on-rails
我的 Rails 已经生锈了,我快把自己逼疯了,试图找出一些可能是如此基本的东西,以至于我看不到树木的森林。
我有一个表单,用于create我的控制器的操作。当我保存时,我还需要更新另一个表中的一些项目。我想把它全部包装在一个交易中。我认为首选是将交易放入模型中。当我这样做并尝试调用该create操作时,它会出错,告诉我该类没有方法。
Equipment_swaps_controller.rb
def create
respond_to do |format|
@equip_swap = EquipSwap.new(equip_swap_params)
if @equip_swap.trans_equip_and_save
format.html { redirect_to @equip_swap, notice: 'Equipment transfer was successfully created.' }
else
format.html { render action: 'failure' }
end
end
end
Run Code Online (Sandbox Code Playgroud)
模型equip_swap.rb
def self.trans_equip_and_save
EquipSwap.transaction do
Tool.transfer_equipment(self.to_vehicle, self.items_moved)
self.save
end
end
Run Code Online (Sandbox Code Playgroud)
具有所需方法的工具模型
def transfer_equipment(location,ids)
ids.each do |id|
Tool.find(id).update(location: location)
end
end
Run Code Online (Sandbox Code Playgroud)
我想调用类的方法将允许它来执行我的的实例方法EquipSwap的实例@equip_swap。当我尝试提交表单,并创建它告诉我,有没有新的记录trans_equip_and_save的方法Class....。有一些明显的东西我错过了。帮助!
方法从self它的调用类方法开始,没有self它的调用实例方法,让我举个例子
Class method
def self.class_method
# do some stuff
end
Instance method
def instance_method
# do some stuff
en
Run Code Online (Sandbox Code Playgroud)
调用类方法使用
ModelName.class_method
Run Code Online (Sandbox Code Playgroud)
调用实例方法使用
@instance_variable.instance_method
Run Code Online (Sandbox Code Playgroud)
在您的代码中,将您的方法更改为实例方法
def trans_equip_and_save
EquipSwap.transaction do
Tool.transfer_equipment(self.to_vehicle, self.items_moved)
self.save
end
end
Run Code Online (Sandbox Code Playgroud)
现在使用实例变量调用这个方法 @equip_swap.trans_equip_and_save
编辑:
如果您使用模型名称调用 transfer_equipment 然后self在方法名称之前添加,我的意思是使其成为类方法,如下所示
def self.transfer_equipment(location,ids)
ids.each do |id|
Tool.find(id).update(location: location)
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5682 次 |
| 最近记录: |