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
对象上定义公共实例方法,就可以从任何地方调用它。它可以工作!我得想清楚这件事。谢谢。如果你愿意写一个正确的答案,我很乐意为你做标记。