gpt4 book ai didi

ruby-on-rails - 我想我在胡闹……Rails 参数

转载 作者:数据小太阳 更新时间:2023-10-29 08:22:43 24 4
gpt4 key购买 nike

我在这些问题中搜索了很多,但我并没有真正看到我的问题,我希望我会......

(我习惯用 C、C++ 等编写代码...但我是 Rails 的新手...)

我有一个 sign_up View ,当我提交时,rails 会自动设置用户填写表单的每个字段。这很酷,但现在我想创建一个新的 text_field 并将用户输入的内容作为此 text_field 中的文本并在以后使用它而不设置任何其他用户的字段,我被告知使用 before_create 和 params 或类似的东西但后来我'我是菜鸟...在 haml 中:

do |f|
= f.text_field :email, :placeholder => "email"

效果很好(它用用户输入的内容设置电子邮件字段)

do |f|
= f.text_field NewVarThatIsNotAFieldOfCurrentNewUser, :placeholder => "referral code"

然后ofc,就出现了这个错误。

Error : undefined local variable or method `NewVarThatIsNotAFieldOfCurrentNewUser' (for the user class ofc)

如果你想要更多信息/代码,我会编辑这个问题:)

提前致谢!

最佳答案

Ruby/Rails 比 C++ 简单

您不需要在每次要使用新变量时都“声明”它们——您只需填充它们以便删除它们。此外,Ruby/Rails 是 object orientated ,这意味着您所做的一切都需要基于对象。


变量

你的错误是这样描述的:

undefined local variable or method `NewVarThatIsNotAFieldOfCurrentNewUser'

这意味着您正在尝试加载您尚未创建的变量。我提到过您不需要像 C++ 那样声明变量,但是您确实需要用数据填充它们,或者至少让您的应用可以访问它们

为了做到这一点,您需要在 Controller 中声明并填充变量,尽管这让我进入下一个要点——关于您尝试使用变量的上下文。

--

对象

由于 Rails/Ruby 是面向对象的,这意味着您所做的一切都需要以对象 为中心。这就是为什么您的错误状态为 local variable or method - objects have "methods"as well as data

无论如何,解决您的问题的方法是确保在您调用/创建新的 User 对象时您的用户拥有的属性 可用。为此,我建议使用 attr_accessor ,虽然老实说我不太确定您要问什么。

这是我要做的:

#app/models/user.rb
class User < ActiveRecord::Base
attr_accessor :new_attribute
end

#app/views/users/sign_up.html.erb
<%= form_for @user do |f| %>
<%= f.text_field :new_attribute %>
<%= f.submit %>
<% end %>

这将创建所谓的虚拟属性,这意味着它不会保存到数据库中(因为数据库不支持相应的属性)


修复

如果您想为用户没有数据(仍在数据库中)的"new"属性收集数据,您可能需要使用以下方法:

#app/views/users/sign_up.html.erb
<%= form_for @user do |f| %>
<%= f.text_field :attribute %>
<% end %>
<% end %>

关于您的问题 - 我相信 attr_accessor 方法是最合适的。这将使您能够“重用”提交的数据,而无需将其存储在数据库中。

--

MVC

最后,给你更多的背景信息——我不知道你对MVC有多熟悉(我相对地假设),但我想我给了你一些关于 Rails 应用程序如何工作的想法:

enter image description here

MVC 意味着您有一个ModelviewController。所有这些共同为您的应用程序提供基本级别的功能 - 为您提供从数据库创建和编辑数据的能力。

我之所以提到这一点,是因为如果您能够从架构的角度理解 Rails 的工作原理,您将能够更好地利用它。例如,您提到您对 before_create 感到困惑,然后将问题标记为 before_action

这两个回调服务于 Rails 框架的不同部分,因此不会执行相同的功能。

-- before_create is for your Model

-- before_action is for your Controller

关于ruby-on-rails - 我想我在胡闹……Rails 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25804597/

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