在视图中访问 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 有一个初步的了解?!