2015-08-20 64 views
1

從視圖中存儲某些東西在我的類變量中的正確語法是什麼?比方說,這是代碼:在視圖中訪問類變量

控制器:

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

* 
* 
* 
methods 
* 
* 
* 
end 

表:

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

這僅僅是一個形式的一個例子,因爲它沒有功能,我不能從視圖中查找訪問@@myvar的正確語法。謝謝 !

+1

這是一個非常非常糟糕的做法,絕不應該在rails中完成!請告訴我們爲什麼你需要這個,我們找到更好的解決方案! –

+0

btw:form_for對象以「f」作爲對象的標識符打開一個塊。對象是模型的對象,而不是控制器 –

+0

嗯,我想在控制器中有一種臨時變量來完成一些可以從窗體接收數據的東西,而且我不擅長導軌所以我不能想出另一種方法,這就是爲什麼我想出了這個。 – lmatejic

回答

1

作爲請求我編輯,包括attr_accessor

Rails的方式。我只是飛過去,希望你能得到它。你肯定需要閱讀更多關於軌道及其概念的介紹。

你有軌的模型,讓我們把它叫做動物

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幫手,創建表單,與@animal(這是一個新的動物)相關聯。你傳遞| f |成塊,所以用F你可以訪問形式

=form_for @animal do |f| 

那麼你可以去爲每個字段需要調用另一個軌道幫手 您還可以訪問attr_accessors。

=f.text_field :race 
=f.text_field :name 
=f.text_field :age 
=f.text_field :non_saved_variable 

由你得到的東西

不fortget f.submit因爲你的表單需要一個提交按鈕

,如果你現在點擊此按鈕,表格將被張貼到鋼軌的創建方法。所以你需要把它帶入你的控制器

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

+0

我瞭解這些事情的原理,我不知道如何實現我在評論中寫到的東西。創建一個變量,它將從視圖中獲取某些內容,然後對其執行操作,而不會將其存儲在實際的數據庫中,因爲這不是必需的。 – lmatejic

+0

如果你不想讓它在數據庫中,那麼你去attr_accessor。生病編輯我的帖子 –

+0

attr_accessor可用於您不想直接存儲在數據庫中的值,並且只會存在於對象的生命週期(例如密碼)中。 –

2

千萬不要這麼做

你可以得到或任何類別的設置類變量:

<%= FooController.class_variable_get(:@@myvar) %> 
<%= FooController.class_variable_set(:@@myvar, 'value') %> 

這可能不是你想要的。不要做。你想達到什麼目的?

而是執行此操作:

如果這是您要提供給該控制器中的所有行動過濾器前,考慮AA實例變量集中的變量:

class FooController < ApplicationController 

    before_filter :set_var 

    private 
    def set_var 
     @my_var = "I'm a string" 
    end 
end 
在你看來

然後,只要調用<%= @my_var %>

+0

我怎麼能從我的文章中的那種形式存儲東西到變量中? – lmatejic