轨道上的红宝石 - 订购两个型号

时间:2016-09-02 12:57:20

标签: ruby-on-rails

我有两个模型image.rb和story.rb

我试图一起订购。

stories_controller.rb看起来像这样:

def index
    @stories = Story.all.order(:cached_votes_total => :desc)
    @images = Image.all.order(:cached_votes_total => :desc)
    @combined = (@stories + @images).sort_by {|record| record.created_at}
end


private
    def story_params
        params.require(:story).permit(:title, :content, :category)
    end


images_controller.rb看起来像这样:

private
    def image_params
        params.require(:image).permit(:title, :image, :image_file_name, :category)
    end

在我的index.html.erb中我尝试对它们进行排序,但我遇到了未定义的方法错误,因为它们有不同的参数。

<% @combined.each do |s| %>
    ...        
<% end %>

有办法解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

这是一种错误的方法,不建议组合两个模型,你应该使用模型关联..例如

#  Image Model
class Image < ActiveRecord::Base
    belongs_to :story
end

#  Image Model
class Story < ActiveRecord::Base
    has_one :image
end

在控制器中..

def index
    @stories = Story.find(:all, :include => :image).order(:cached_votes_total => :desc)
end

,最后在视图中

<% @stories.each do |story| %>

# here you can access story and story.image
    ...        
<% end %>