Tag: 演示者

HomePresenter的未初始化常量

我正在尝试实现一个HomePresenter,以便在我的Pages控制器的home动作中使用: # app/controllers/pages_controller.rb class PagesController < ApplicationController def home @presenter = Pages::HomePresenter.new(current_user) end … end # app/presenters/pages/home_presenter.rb module Pages class HomePresenter def initialize(user) @user = user end … end end 我的演示者规范通过没有错误,但当我运行服务器并访问Chrome中的主页时,我得到了这个: uninitialized constant ActionController::Caching::Pages::HomePresenter 对于我的应用程序中的其他两个模型,我使用的IndexPresenters与命名约定和目录结构几乎完全相同,但它们都没有出现此错误。 在这里找到一个类似但尚未回答的post: 控制器名称和演示者名称空间之间的名称冲突 有任何想法吗?

Rails如何为多态关联填充“model_type”字段?

我有一个活动模型。 它belongs_to :parent, :polymorphic => true 。 Rails是否使用parent.class.name , parent.model_name或其他东西来填充parent_type字段? 我希望Presenter的行为与它包装的父对象相似,我需要覆盖正确的方法。 谢谢。

使用rails演示者 – 记忆在3.1中被弃用 – 使用|| =而不是?

问题:尽可能避免创建多个对象或多个查询。 我正在使用带有rails的Presenters作为最佳实践。 我遵循的建议说,使用“扩展ActiveSupport.Memoizable”(然后使用memoize:方法来使用它们)比使用@the_record = record ||= @record样式设置项目@the_record = record ||= @record几个问题 – false或nil没有被存储,所以查询再次被调用,而memoizable更好地使用缓存(即使用它!)。 但是我看到memoizable在rails 3.1中被弃用了。我在webwave下使用github并使用语句:“DEPRECATION WARNING:不推荐使用ActiveSupport :: Memoizable,将来的版本中将删除它,只需使用Ruby memoization模式。(来自extend at /Users/kain/.rvm/gems/ruby-1.9.3-preview1/bundler/gems/carrierwave-c4459179b0f8/lib/carrierwave/mount.rb:284″ 。 也许它已经解决了? 谁知道? 关于今后使用的最佳做法的任何建议? 使用|| =语法? 上述问题怎么样?

如何在Rails中将参数传递给委托方法

我想有一个仪表板来显示多个模型的摘要,我使用Presenter实现它而没有自己的数据。 我使用ActiveModel类(没有数据表): class Dashboard attr_accessor :user_id def initialize(id) self.user_id = id end delegate :username, :password, :to => :user delegate :address, :to => :account delegate :friends, :to => :friendship end 通过委托,我希望能够调用Dashboard.address并返回Account.find_by_user_id(Dashboard.user_id).address 。 如果Dashboard是一个ActiveRecord类,那么我可以声明Dashboard#belongs_to :account和delegate将自动工作(即,Account会知道它应该返回来自帐户的地址属性, user_id等于Dashboard实例中的to user_id )。 但Dashboard不是ActiveRecord类,所以我不能声明belongs_to 。 我需要另一种方法来告诉Account查找正确的记录。 有没有办法克服这个问题? (我知道我可以伪造Dashboard以获得一个空表,或者我可以将User的实例方法重写为带有参数的类方法。但这些解决方案都是hacks)。 谢谢。