Как отправить мгновенную переменную из контроллера в методы после создания в рельсах?
Как отправить мгновенную переменную из контроллера в методы после создания в рельсах?
если у меня есть контроллер, как это:
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