Как отправить мгновенную переменную из контроллера в методы после создания в рельсах?

Как отправить мгновенную переменную из контроллера в методы после создания в рельсах?

если у меня есть контроллер, как это:

class ApplicationController < ActionController::Base
  protect_from_forgery

  before_filter :set_url

  def set_url
    @url = if request.url.include?("http://localhost:3000/")
      "http://localhost:3000"
    else
      "http://tester.com"
    end
  end
end

и у меня есть модель, как это:

class Article < ActiveRecord::Base
  after_create :get_url

  def get_url
    // how to get instant variable @url from before filter in application controller to this method ?
  end
end

спасибо, прежде чем

1 ответ

Вам нужно будет использовать attr_accessor

Проблема в том, что у вас нет доступа @instance_variables в твоей модели. Это часть шаблона проектирования MVC - ваша модель устанавливает данные, а не наоборот

Чтобы сделать ваши данные доступными внутри вашей модели, используйте виртуальный атрибут, назначенный с помощью attr_accessor метод в вашей модели:

#app/models/article.rb
Class Article < ActiveRecord::Base
    attr_accessor :url

    def get_url
        self.url
    end
end

Это позволит вам сделать это в контроллере:

  before_filter :set_url

  def set_url
    @article = Article.new
    @article.url = if request.url.include?("http://localhost:3000/")
      "http://localhost:3000"
    else
      "http://tester.com"
    end
  end

Если вы хотите получить доступ к URL var внутри вашей модели, вам нужно будет найти способ сохранить данные. Это зависит от того, чего вы пытаетесь достичь. Например, если вы хотите установить URL-адрес для объекта, который вы хотите создать, вам может быть лучше использовать after_create обратный звонок внутри модели:

#app/models/article.rb
Class Article < ActiveRecord::Base
    after_create :set_url
    attr_accessor :url

    def set_url
       self.url = ...
    end
end
Другие вопросы по тегам