我有一个叫做多态的模型Update.通常,我可以updatable使用简单的方法呈现其关联模型:
<%= render @update.updatable %>
Run Code Online (Sandbox Code Playgroud)
不幸的是,如果我从命名空间控制器中调用此方法,那么Rails也会尝试命名视图路径,admin/reviews/review而不是搜索reviews/review.这导致如下错误:
Missing partial admin/reviews/review
Run Code Online (Sandbox Code Playgroud)
通常我可以硬编码变通方法,例如:
<%= render :partial => "/reviews/review", :locals => {:review => @update.updatable}
Run Code Online (Sandbox Code Playgroud)
如果关联不是多态的,那就没关系,但既然如此,如果updatable不是a ,我会得到错误Review.不幸的是,我有几十个可能的updatables,并通过case声明进行分支将很难维护.
我有没有想到更简单的方法?
我正在与 Active Admin 合作。目前,我有一个索引页面,允许我查看用户标记的所有资源。鉴于存在各种类型的资源,我的 Flagg 类和各种资源表之间存在多态关系。
在我的索引页面中,在 Active Admin 上,我希望能够链接到属于特定资源类型的相应显示页面。
我已经让我所有的代码都能工作了,但我不喜欢我想出的解决方案。
我如何改进我当前的解决方案,这样我就不必写一个尴尬的条件?
楷模
class Flag < ActiveRecord::Base
#create relationships with user and flag model
belongs_to :flaggable, polymorphic: true
end
class MilitaryResource < ActiveRecord::Base
has_many :flags, as: :flaggable, :dependent => :destroy
end
class DistrictResource < ActiveRecord::Base
has_many :flags, as: :flaggable, :dependent => :destroy
end
class SchoolResource < ActiveRecord::Base
has_many :flags, as: :flaggable, :dependent => :destroy
end
Run Code Online (Sandbox Code Playgroud)
活动管理员
ActiveAdmin.register Flag do
#parameters permitted to create military resources
permit_params :id, :user_id, :flaggable_id, :flaggable_type, …Run Code Online (Sandbox Code Playgroud) ruby polymorphism ruby-on-rails polymorphic-associations activeadmin
class User < ActiveRecord::Base
belongs_to :role, :polymorphic => true
class Admin < ActiveRecord::Base
has_one :user, :as => :role
class Dealer < ActiveRecord::Base
has_one :user, :as => :role
class Buyer < ActiveRecord::Base
has_one :user, :as => :role
Run Code Online (Sandbox Code Playgroud)
def new
@dealer = Dealer.new
respond_to do |format|
format.html
format.xml { render :xml => @dealer }
end
end
def create
@dealer = Dealer.new(params[:dealer])
respond_to do |format|
if @dealer.save
flash[:notice] = 'Dealer was successfully created.'
format.html { redirect_to [:admin, @dealer] }
format.xml { …Run Code Online (Sandbox Code Playgroud) 我需要复制构造一个对象,同时将它的类型更改为另一个类,它是同一个类层次结构的成员.我已经阅读过多态复制构造函数,并且(希望)理解它背后的想法.然而,我仍然不知道这种模式是否适用于我的情况,如果适用,如何实施它.我认为最好是在一个例子中展示我需要的东西.
有一Base类和两个子类,Child1和Child2.我需要创建一个Child2基于类型的对象Child1,即.最重要的是,我需要复制的对象p_int指向从Child1到Child2.我写了一个简单的程序来说明它:
#include <iostream>
using namespace std;
class Base {
public:
Base() { p_int = new int; *p_int = 0; }
~Base() { delete p_int; }
virtual Base* clone() const = 0;
void setpInt(int val) { *p_int = val; }
void setInt(int val) { a = val; }
virtual void print() {
cout << "Base: ";
cout << (long)p_int << ":" << *p_int << …Run Code Online (Sandbox Code Playgroud) 我的情况是有几种不同的模型可以有评论.试图找出关系:
Post
has_many :comments
Update
has_many :comments
Comment
belongs_to EITHER :post OR :update (but not both)????
Run Code Online (Sandbox Code Playgroud)
什么是建立评论关系的正确方法?我希望能够打电话Post.comments和Update.comments
ruby activerecord ruby-on-rails polymorphic-associations ruby-on-rails-3