Руби/Rails является гораздо проще, чем C++
Вам не нужно «объявлять» новые переменные каждый раз, когда вы хотите их использовать - вы просто заполняете их, чтобы их разглядывать. Кроме того, Ruby/Rails - object orientated, что означает, что все, что вам нужно, должно основываться на объектах.
Var
Ваша ошибка формулируется как например:
undefined local variable or method `NewVarThatIsNotAFieldOfCurrentNewUser'
Что это означает, что вы пытаетесь загрузить переменную, которую вы еще не создали. Я упомянул, что вам не нужно объявлять переменные так же, как и C++, но вам необходимо заполнить их данными или, по крайней мере, получить их для вашего приложения.
Для этого вы должны указать, Мне нужно объявить &, заполнив переменную в вашем контроллере, хотя это приводит меня к следующему пункту - относительно контекста, в котором вы пытаетесь использовать эту переменную.
-
Объекты
В Rails/рубин является объектно-ориентированным, то это означает, что все, что вы делаете потребности сосредоточены вокруг объектов. Вот почему ваша ошибка заявляет local variable or method
- объекты имеют «методы», а также данные
Во всяком случае, так, чтобы решить проблему, чтобы убедиться, что атрибут, который имеет ваш пользователь доступен, если вы звоните/создать новый объект 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 %>
Это создаст то, что известно как virtual attribute
, что означает, что она не будет сохранена в базе данных (как база данных не поддерживается соответствующий атрибут)
Fix
Если вы хотите, чтобы собрать данные для "нового" атрибут-й е пользователи не имеют данных (что до сих пор в базе данных), вы, вероятно, хотите использовать следующее:
#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
для вашего Model
- before_action
для вашего Controller
You рок человек! Я попробую это :) – Charlon