- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我在这些问题中搜索了很多,但我并没有真正看到我的问题,我希望我会......
(我习惯用 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 应用程序如何工作的想法:
MVC 意味着您有一个Model
、view
和Controller
。所有这些共同为您的应用程序提供基本级别的功能 - 为您提供从数据库创建和编辑数据的能力。
我之所以提到这一点,是因为如果您能够从架构的角度理解 Rails 的工作原理,您将能够更好地利用它。例如,您提到您对 before_create
感到困惑,然后将问题标记为 before_action
。
这两个回调服务于 Rails 框架的不同部分,因此不会执行相同的功能。
--
before_create
is for yourModel
--
before_action
is for yourController
关于ruby-on-rails - 我想我在胡闹……Rails 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25804597/
有时这段代码可以正常工作,但这取决于我将要执行的部分放在哪里,这实际上是说它根本不起作用 - 但我真的不知道为什么不这样做。也许你们中的一个人能够提供一些见解: function displayBan
我有一个3从属hadoop集群,并且正在单个网站上进行爬网。但是,只有1个从属设备正在执行访存(尽管其他从属设备仍处于 Activity 状态)。如果仅对1个域进行爬网,这是正常行为吗?有没有办法强制
我是一名优秀的程序员,十分优秀!