gpt4 book ai didi

ruby-on-rails - 如何使用 Ruby on Rails 将数据从 Controller 传递到模型?

转载 作者:数据小太阳 更新时间:2023-10-29 06:48:42 25 4
gpt4 key购买 nike

如何将数据从 Controller 传递到模型?

在我的 application_controller 中,我获取用户的位置(州和城市)并包含一个 before_filter 以使其在我的所有 Controller 中都可以通过

访问
before_filter :community

def community
@city = request.location.city
@state = request.location.state
@community = @city+@state
end

然后我尝试通过以下方式将 Controller 中检索到的数据添加到模型中:

before_save :add_community

def add_community
self.community = @community
end

然而,数据永远不会从 Controller 传输到模型。如果我使用:

def add_community
@city = request.location.city
@state = request.location.state
@community = @city+@state
self.community = @community
end

request.location.cityrequest.location.state 方法在模型中不起作用。我知道其他一切正常,因为如果我将 @city@state 定义为字符串,在 def_community 下,那么一切正常,除了我不' 有一个动态变量,只是放置在模型中的一个字符串。另外,我知道请求在 Controller / View 中工作,因为我可以让它们显示正确的动态信息。问题只是将数据从 Controller 获取到模型。非常感谢您的宝贵时间。

最佳答案

您正在考虑的概念是 MVC architecture ,这是关于分离责任。模型应该处理与数据库(或其他后端)的交互,而不需要知道它们正在使用的上下文(无论是 HTTP 请求还是其他), View 不需要知道后端和 Controller 处理两者之间的交互。

因此,对于 Rails 应用程序, View 和 Controller 可以访问 request 对象,而您的模型则不能。如果您想将当前请求中的信息传递给您的模型,则由您的 Controller 来执行。我将按如下方式定义您的 add_community:

class User < ActiveRecord::Base

def add_community(city, state)
self.community = city.to_s + state.to_s # to_s just in case you got nils
end

end

然后在你的 Controller 中:

class UsersController < ApplicationController

def create # I'm assuming it's create you're dealing with
...
@user.add_community(request.location.city, request.location.state)
...
end
end

我不喜欢直接传递 request 对象,因为这确实保持了模型与当前请求的分离。 User 模型不需要了解 request 对象或它们的工作方式。它所知道的是它正在获取一个 city 和一个 state

希望对您有所帮助。

关于ruby-on-rails - 如何使用 Ruby on Rails 将数据从 Controller 传递到模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10237388/

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