Ruby on rails 如何通过控制器从模型更新对象属性

Ruby on rails 如何通过控制器从模型更新对象属性,ruby-on-rails,Ruby On Rails,为了一个非常简单的问题,我一直在努力遵循其他答案和文档 我理解“瘦”控制器和“胖模型”的概念。然而,我真的很难在控制器和模型之间传递数据 例如,我只想在调用操作时更新属性 class BlogsController < ApplicationController before_action :find_blog, only: [:show, :edit, :update, :destroy, :active] def active @blog.active =

为了一个非常简单的问题,我一直在努力遵循其他答案和文档

我理解“瘦”控制器和“胖模型”的概念。然而,我真的很难在控制器和模型之间传递数据

例如,我只想在调用操作时更新属性

 class BlogsController < ApplicationController


 before_action :find_blog, only: [:show, :edit, :update, :destroy, :active]

   def active
      @blog.active = true
      @blog.save
      Blog.send_subscription_emails
      render template: "/blogs/backend/active"
   end
 end
class BlogsController
这显然看起来很糟糕,因为模型应该可以访问数据库来更改属性。这是如何做到的,因为我无法将这个实例变量传递到模型中。它与控制器中的“实例”不同

比如说,

class Blog < ApplicationRecord
  def self.turn_active
      @blog.active = true
  end
end
classblog
这行不通。我的选择是什么?

您可以:

# in blog model
def activate
  update_attributes(active: true)
end

# in controller
def active
  @blog.activate
  Blog.send_subscription_emails
  render template: "/blogs/backend/active"
end

您可以在
Blog
model:
def activate上使用方法
activate
;self.active=true;结束
,然后在控制器中使用
def active@blog.activate;[...] ; end
是新行的简写)我很惊讶这会奏效。控制器中的实例变量可以访问模型中的方法?!我不确定我是否理解你的问题。。。但只要将
@blog
设置为blog实例对象,如果在
blog
对象上定义公共实例方法,就可以从任何地方调用它。它可以工作!我得想清楚这件事。谢谢。如果你愿意写一个正确的答案,我很乐意为你做标记。