Ruby on rails 模型和控制器使用

Ruby on rails 模型和控制器使用,ruby-on-rails,Ruby On Rails,我试图找出模型和控制器之间的正确关系和用法,尽管我已经读了足够多的书,但我仍然遗漏了一些东西,因为每次我与一个动作建立连接时,我总是会出错。比如, Controller.rb def destroy Map.clear end Model.rb 因此,在模型中使用self.clear时,我认为Map.clear将在控制器中执行此操作。我这里出了什么问题?您的控制器方法没有问题-很明显,您的类方法存在缺陷。此代码: def self.clear update_attribute(..

我试图找出模型和控制器之间的正确关系和用法,尽管我已经读了足够多的书,但我仍然遗漏了一些东西,因为每次我与一个动作建立连接时,我总是会出错。比如,

Controller.rb
def destroy
    Map.clear
end
Model.rb
因此,在模型中使用self.clear时,我认为Map.clear将在控制器中执行此操作。我这里出了什么问题?

您的控制器方法没有问题-很明显,您的类方法存在缺陷。此代码:

def self.clear
  update_attribute(...)
end
将失败,因为update\u attribute或update\u attributes不是有效的ActiveRecord类方法-它将在模型实例上调用。您可以使用更新所有。。。方法,尽管这取决于您在该方法中究竟要实现什么


如果您实际上打算更新/软删除一条记录,那么您不应该在类级别工作,而应该根据传递的id获取一条记录—您正在传递,对吗?并调用该实例上的某个方法来更新它。

我认为您应该查找/阅读有关模型、类和实例方法/变量的主题,因为您的clear方法显示出非常缺乏理解;在控制器def destroy something=something.findparams[:id]something.cancel end中,在模型中有“class something”true“end end end end”类似的内容。我觉得我的脑子在放屁。我一直在阅读和看例子,但无法理解。我想如果您在模型中定义了一些东西来处理数据库,比如update_attritubes,那么您可以在控制器中调用它。@user2419316:您的控制器应该对模型进行简单的调用。调用something.update\u attributesome\u字段:true可以,但是调用something.cancel where.cancel调用update\u属性似乎更干净,如果这是您想要的结果。我看得出你的方法没有错。现在的结果是否符合您的预期?不确定为什么,但如果我在控制器中放置something.something或@something.something,并在模型中定义something update_属性end,我会得到一个错误,即没有为class0x039393定义update_attritubes。也许我必须做些什么@something=something.find:all@something.update\u attritube:some=>some end。如果你知道我的意思的话,我会尝试理解所有这些,然后通过示例更快地学习,然后阅读解释。如果没有非常长的对话,这是无法在抽象中解决的,因为这不是合适的论坛。请发布您实际使用的全部代码,包括用于调用控制器操作的视图、控制器操作本身以及任何相关模型代码。
def self.clear
  update_attribute(...)
end