1

在rails中创建后如何将即时变量从控制器发送到方法?

如果我有这样的控制器:

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

谢谢之前

4

1 回答 1

0

你需要使用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
于 2014-05-08T08:28:15.427 回答