gpt4 book ai didi

ruby-on-rails - Rails 将 Controller 逻辑移动到模型中

转载 作者:行者123 更新时间:2023-12-01 12:48:04 25 4
gpt4 key购买 nike

我正在重构我的 Rails 应用程序。我读过很多关于将 Controller 逻辑移动到模型的帖子,但我在尝试时遇到了一些问题。

我需要帮助

  1. 了解以下错误的原因
  2. 需要知道我应该阅读哪些文档才能成功地将我的所有 Controller 逻辑移至模型

由于我还没有对我的应用程序进行任何重大重构,所以先尝试一个简单的重构。

PostsController(之前)

def create
@post = Post.create(params[:post])
@post.user_id = session[:user_id]
@post.num_likes = 0
@post.num_dislikes = 0
@geoip = GeoIP.new("#{Rails.root.to_s}/db/GeoIP.dat").country(request.remote_ip)
@post.user_location = @geoip.country_name
end

后模型(新)

before_save :initialize_post

def initialize_post
self.user_id = session[:user_id]
self.num_likes = 0
self.num_dislikes = 0
@geoip = GeoIP.new("#{Rails.root.to_s}/db/GeoIP.dat").country(request.remote_ip)
self.user_location = @geoip.country_name
end

PostsController(新)

def create
@post = Post.create(params[:post])
end

但是,由于诸如session undefined AND method request undefined 这样的错误,我连这个简单的重构都没有做。我不确定为什么不能在模型类中使用这些操作。

有人可以解释这背后的原因并指导我找到一些好的文档来帮助我顺利完成重构过程吗?

非常感谢。

最佳答案

对于你的 Controller ,我会做类似的事情..

def create
@post = Post.new(params[:post])
@post.user_id = session[:user_id]
@post.ip_address = request.remote_ip
@post.save
end

和你的模型……类似的东西;

attr_accessor :ip_address
before_create :set_default_values
before_save :geo_locate

private

def geo_locate
@geoip = GeoIP.new("#{Rails.root.to_s}/db/GeoIP.dat").country(self.ip_address) rescue nil
self.user_location = @geoip.country_name unless @geoip.blank?
end

# This only runs when a new record is created. Alternatively, look into setting a default value on your database columns!
def set_default_values
self.num_likes = 0
self.num_dislikes = 0
end

关于ruby-on-rails - Rails 将 Controller 逻辑移动到模型中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14191328/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com