访问视图中的类变量

时间:2015-08-20 11:16:58

标签: ruby-on-rails-4 class-variables

从视图中将某些东西存储在我的类变量中的正确语法是什么?让我们说这是代码:

控制器:

class FooController < ApplicationController
@@myvar = "I'm a string"

*
*
*
methods
*
*
*
end

形式:

<%= form_for(@something) do |f| %>
    <%= f.text_field :myvar %>
    <%= f.submit %>
<% end %>

这只是表单的一个示例,因为它不起作用,我无法找到从视图中访问@@myvar的正确语法。谢谢!

2 个答案:

答案 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?!