在视图中访问 class 个变量
Accessing class variables in views
从视图中将内容存储到我的 class 变量中的正确语法是什么?假设这是代码:
控制器:
class FooController < ApplicationController
@@myvar = "I'm a string"
*
*
*
methods
*
*
*
end
形式:
<%= form_for(@something) do |f| %>
<%= f.text_field :myvar %>
<%= f.submit %>
<% end %>
这只是一个表单示例,因为它不起作用,我无法从视图中找到用于访问 @@myvar
的正确语法。谢谢!
不要这样做
您可以通过以下方式从任何 class 中获取或设置 class 个变量:
<%= FooController.class_variable_get(:@@myvar) %>
<%= FooController.class_variable_set(:@@myvar, 'value') %>
这可能不是您想要的。不要做。你想达到什么目的?
改为这样做:
如果您希望该控制器中的所有操作都可以使用该变量,请考虑在前置过滤器中设置实例变量:
class FooController < ApplicationController
before_filter :set_var
private
def set_var
@my_var = "I'm a string"
end
end
那么在你看来,只要调用<%= @my_var %>
根据要求我编辑了,包括attr_accessor
Rails 方式。生病只是飞过来,希望你得到它。您肯定需要阅读更多关于 rails 及其概念的介绍。
你有一个 rails 模型,我们称它为 Animal
class Animal < ActiveRecord::Base
attr_accessor :non_saved_variable
end
这是一个数据库-table,假设我们在这个table中存储了种族、姓名和年龄。
现在我们需要一个控制器,create/edit/update/delete 动物
class AnimalController < ActionController::Base
def new
# this creates a new animal with blank values
@animal = Animal.new
end
end
现在您需要进入 routes.rb 并为动物创建一条路线
resources :animal
这将为动物的每个动作创建所有(restful)条路线。
现在您需要使用模板来呈现表单
form_for 是一个 rails 助手,用于创建与 @animal(这是一个新的 Animal)关联的表单。你通过了 |f|进入块,因此您可以使用 f 访问表单
=form_for @animal do |f|
然后你可以为每个需要调用另一个 rails 助手的字段
您还可以访问 attr_accessors.
=f.text_field :race
=f.text_field :name
=f.text_field :age
=f.text_field :non_saved_variable
这样你就得到了东西
不要忘记 f.submit
因为您的表单需要一个提交按钮
如果您现在单击您的按钮,表单将被发送到 rails 的创建方法。所以你需要把它带入你的控制器
def create
# create a new animal with the values sended by the form
@animal = Animal.new params[:animal]
# here you can access the attr_accessor
@animal.do_something if @animal.non_saved_variable == "1337"
if @animal.save
# your animal was saved. you can now redirect or do whatever you want
else
#couldnt be saved, maybe validations have been wrong
#render the same form again
render action: :new
end
end
我希望这能让您对 rails 有一个初步的了解?!
从视图中将内容存储到我的 class 变量中的正确语法是什么?假设这是代码:
控制器:
class FooController < ApplicationController
@@myvar = "I'm a string"
*
*
*
methods
*
*
*
end
形式:
<%= form_for(@something) do |f| %>
<%= f.text_field :myvar %>
<%= f.submit %>
<% end %>
这只是一个表单示例,因为它不起作用,我无法从视图中找到用于访问 @@myvar
的正确语法。谢谢!
不要这样做
您可以通过以下方式从任何 class 中获取或设置 class 个变量:
<%= FooController.class_variable_get(:@@myvar) %>
<%= FooController.class_variable_set(:@@myvar, 'value') %>
这可能不是您想要的。不要做。你想达到什么目的?
改为这样做:
如果您希望该控制器中的所有操作都可以使用该变量,请考虑在前置过滤器中设置实例变量:
class FooController < ApplicationController
before_filter :set_var
private
def set_var
@my_var = "I'm a string"
end
end
那么在你看来,只要调用<%= @my_var %>
根据要求我编辑了,包括attr_accessor
Rails 方式。生病只是飞过来,希望你得到它。您肯定需要阅读更多关于 rails 及其概念的介绍。
你有一个 rails 模型,我们称它为 Animal
class Animal < ActiveRecord::Base
attr_accessor :non_saved_variable
end
这是一个数据库-table,假设我们在这个table中存储了种族、姓名和年龄。
现在我们需要一个控制器,create/edit/update/delete 动物
class AnimalController < ActionController::Base
def new
# this creates a new animal with blank values
@animal = Animal.new
end
end
现在您需要进入 routes.rb 并为动物创建一条路线
resources :animal
这将为动物的每个动作创建所有(restful)条路线。
现在您需要使用模板来呈现表单
form_for 是一个 rails 助手,用于创建与 @animal(这是一个新的 Animal)关联的表单。你通过了 |f|进入块,因此您可以使用 f 访问表单
=form_for @animal do |f|
然后你可以为每个需要调用另一个 rails 助手的字段 您还可以访问 attr_accessors.
=f.text_field :race
=f.text_field :name
=f.text_field :age
=f.text_field :non_saved_variable
这样你就得到了东西
不要忘记 f.submit
因为您的表单需要一个提交按钮
如果您现在单击您的按钮,表单将被发送到 rails 的创建方法。所以你需要把它带入你的控制器
def create
# create a new animal with the values sended by the form
@animal = Animal.new params[:animal]
# here you can access the attr_accessor
@animal.do_something if @animal.non_saved_variable == "1337"
if @animal.save
# your animal was saved. you can now redirect or do whatever you want
else
#couldnt be saved, maybe validations have been wrong
#render the same form again
render action: :new
end
end
我希望这能让您对 rails 有一个初步的了解?!