我正在为我的方案添加一个新模型,我想知道是否有办法将两个模型关联到一个模型中,然后在视图中显示任何/所有结果。例如,这是我目前拥有的;
@tweet_category.order("position").each do |tweet|
<%= tweet.title %>
end
只是一个简短的例子......现在如果我将facebook添加到此中该怎么办?我首先考虑创建一个名为stuff
的模型,然后将其与tweet_category
和facebook_category
相关联;
class Stuff < ActiveRecord::Base
attr_accessible :title
belongs_to :user
has_many :tweet_category
has_many :facebook_category
end
现在在我的控制器中,我猜我会做以下事情;
class StuffController < ApplicationController
def index
@stuff_list = Stuff.find(:all)
end
end
在我看来,我只是从上面的视图中执行以下操作;
@stuff_list.order("position").each do |stuff|
<%= stuff.title %>
end
我理解这里的逻辑吗?那将有两个模型/两个表db ..等..
答案 0 :(得分:0)
首先,我不明白为什么你需要那个“东西”模型。它属于用户和has_many tweet_category和facebook_category,只是提供“标题”,当你的用户模型可以完成这项工作时(我的意思是,每个用户可以有很多推文和fb类别,而不是有一个或几个) “有很多东西的东西。”
无论如何,如果您想在模型之间建立链接,然后在视图中显示所有内容,请首先在用户模型中进行操作:
class User < ActiveRecord::Base
...
has_many :facebook_categories #( I don't know how rails would pluralize it, btw, I'm just making an assumption )
has_many :tweeter_categories
end
和
class Facebook_category
...
belongs_to :user
end
并按照高音扬声器类别进行操作
然后在你的控制器中:
def show_everything #Here it's a custom action, but you can call it wherever you want
@users = User.all
end
最后在你看来:
<% @users.each do |user| %>
<% user.facebook_categories.all.each do |fb_c| %>
<%= fb_c.title %>
<% end %>
<% user.tweeter_categories.all.each do |t_c| %>
<%= t_c.title %>
<% end %>
<% end %>
也许只是尝试为你的模型获取一个更好的名称,所以复数化不会变得混乱(我看到“.all”方法已被弃用,所以可能用某些东西替换它
希望它有所帮助!
修改:
基本上,当你做
时@users = User.all
rails正在做的是将每个“用户”的每个哈希定义在一个数组中。所以,如果你想在一个数组中混合两个表的数组,你可以这样做:
@categories = [] << Facebook_category.all, Tweeter_category.all
然后您将拥有一个数组(@category),其中包含2个数组(Facebook_category有一个ActiveRecord关系,Tweeter_category有一个)。他们自己充满了他们模型的哈希。所以,你需要做的是:
@categories.flatten!
以下是flatten所做的API(基本上删除了第一个tarray中的所有嵌套数组)
现在,你得到了一个哈希数组,是你模型实例的信息。而且,如果可以订购这些信息,则在您的视图中,您只需:
<% @categories.order("updated_at").each do |i| %>
<%= i.title %>
<% end %>