2015-08-20 2 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

Это очень плохой подход и никогда не должен выполняться в рельсах! сообщите нам, зачем вам это нужно, и мы находим лучшее решение! –

+0

btw: form_for object открывает блок с именем «f» в качестве идентификатора объекта. объект является объектом модели, а не контроллера –

+0

Ну, я хотел бы иметь временную переменную в контроллере, чтобы сделать некоторые вещи, которые получат данные из формы, и я не настолько квалифицирован в рельсах поэтому я не мог придумать другой подход, поэтому я придумал это. – lmatejic

ответ

1

, как по запросу я отредактированы, включая attr_accessor

Рельсы. Я просто летаю, надеюсь, что ты это получишь. вам нужно обязательно читать больше представлений о рельсах и его концепции.

у вас есть рельсы-модель, позволяет называть его 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 является помощником рельсы, чтобы создать форму, связанную с @animal (который является новым для животных). Вы проходите | 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 

тем, что вы получите материал

DonT 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 

Надеюсь, это дало вам первое представление о рельсах?!

+0

Я понимаю принципы этих вещей, я не знаю, как достичь того, что я написал там в комментарии. Создание переменной, которая будет получать что-то из представления и делать с ней вещи, не находясь в реальной базе данных, так как это не требуется. – lmatejic

+0

Если вы не хотите, чтобы это было в базе данных, вы идете attr_accessor. ill edit my post –

+0

attr_accessor можно использовать для значений, которые вы не хотите хранить в базе данных напрямую, и это будет существовать только для жизни объекта (например, паролей). –

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 %>

+0

Как я могу хранить что-то в этой переменной из формы, подобной этой в моем сообщении? – lmatejic

Смежные вопросы