从视图中将某些东西存储在我的类变量中的正确语法是什么?让我们说这是代码:
控制器:
class FooController < ApplicationController
@@myvar = "I'm a string"
*
*
*
methods
*
*
*
end
形式:
<%= form_for(@something) do |f| %>
<%= f.text_field :myvar %>
<%= f.submit %>
<% end %>
这只是表单的一个示例,因为它不起作用,我无法找到从视图中访问@@myvar
的正确语法。谢谢!
答案 0 :(得分:2)
不要这样做
您可以通过以下方式从任何类获取或设置类变量:
<%= 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 %>
答案 1 :(得分:1)
根据我编辑的请求,包括attr_accessor
Rails方式。我只是飞过来,希望你明白。你肯定需要阅读有关rails及其概念的更多介绍。
你有一个rails-model,我们称之为Animal
class Animal < ActiveRecord::Base
attr_accessor :non_saved_variable
end
这是一个数据库表,我们可以在这个表中存储种族,名称和年龄。
现在我们需要一个控制器来创建/编辑/更新/删除动物
class AnimalController < ActionController::Base
def new
# this creates a new animal with blank values
@animal = Animal.new
end
end
现在你需要进入你的routes.rb并为动物创建一条路线
resources :animal
这将为动物的每个动作创建所有(宁静的)路线。
现在您需要让模板呈现表单
form_for是一个rails helper,用于创建一个与@animal相关联的表单(这是一个新的Animal)。你传递| f |进入块,所以用f你可以访问表格
=form_for @animal do |f|
然后你可以去你需要调用另一个rails helper的每个字段 你也可以访问attr_accessors。
=f.text_field :race
=f.text_field :name
=f.text_field :age
=f.text_field :non_saved_variable
你得到的东西
不要忘记f.submit
,因为您的表单需要提交按钮
如果您现在单击按钮,表单将发布到rails的create方法。所以你需要把它带进你的控制器
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?!